ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final 问题 - 编译器希望引用未找到的 7.0.0.0
ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final issue - Compiler wants 7.0.0.0 to be referenced which is not found
我遇到了同样的问题。我在 project.json
文件中添加了以下依赖项:
"dependencies": {
"EntityFramework": "7.0.0-beta4",
"EntityFramework.Core": "7.0.0-rc1-final",
"EntityFramework.SqlServer": "7.0.0-beta8",
"EntityFramework.Commands": "7.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
...
我使用 dnu install EntityFramework
和 dnu install EntityFramework.SqlServer
来安装软件包。 "EntityFramework": "7.0.0-beta4",
由安装程序自动写入 dependencies
节点下。
问题/问题 1:令我惊讶的是,当我为 EntityFramework
引入智能时,我提供的可用版本只有 6.1.3
!
问题 2:当我使用 dnu build
编译我的应用程序时(我在添加 EntityFramework
程序集(.Core
和 .Commands
) 在 dependencies
节点下手动我遇到了一堆编译错误:
The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'.
D:\Projects\aspnet\apiservice\Models\SampleData.cs(12,41): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments
D:\Projects\aspnet\apiservice\Models\SampleData.cs(13,32): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments
D:\Projects\aspnet\apiservice\Models\SampleData.cs(14,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(15,42): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(17,43): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(19,45): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(22,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(61,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'SaveChanges' and no extension method 'SaveChanges' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
如果我删除 .Core
和 .Commands
程序集引用项目构建正常。
然后我将 EntityFramework.Core
的版本更改为 7.0.0.0
,如错误中所述:
The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'.
但是 dnu restore
现在给了我以下内容:
Unable to locate Dependency EntityFramework.Core >= 7.0.0
Writing lock file D:\Projects\aspnet\apiservice\project.lock.json
Restore complete, 6675ms elapsed
Errors in D:\Projects\aspnet\apiservice\project.json
Unable to locate Dependency EntityFramework.Core >= 7.0.0
我是asp.net 5
Visual Studio code
平台的新手。我不能使用 Visual Studio 2015
因为开发团队的其他成员正在使用 OSX.
这对我来说是一个学习项目。要求非常简单。连接 SQL 服务器数据库,使用 Entity Framework.
提取 master-child
关系数据
搞砸了!求助!!
提前致谢
更新
我可以看到 project.json
中所有版本 7.0.0-rc1-final
的包的主要变化。我使用 Yeoman 生成器工具来创建项目,但看起来你通过 Visual Studio
更正了包。那么,我是否必须手动更新软件包版本并 restore
它们?
当项目被 Yeoman created/generated 时,默认情况下没有添加 global.json
文件。我可以手动添加它并手动将代码放入其中吗?这行得通吗?
我还可以看到一些额外的包引用被添加到 project.json
文件中,这些引用不是 Yeoman 生成器默认添加的——比如 Microsoft.AspNet.Tooling.Razor
、Microsoft.Extensions.Logging.Console
、 Microsoft.Extensions.Logging.Debug
、Microsoft.Extensions.Logging
等,是否都在项目中得到有效利用?因为生成器没有自动添加它们,所以我可以手动添加它们并使用 dnu restore
恢复吗?手动添加对项目有影响吗?
你应该从依赖项中删除 "EntityFramework"
(删除行"EntityFramework": "7.0.0-beta4"
)并使用
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final"
只有。如果添加了 "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
,则不需要显式添加 "EntityFramework.Core": "7.0.0-rc1-final"
,因为存在以下依赖关系:
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final":
"EntityFramework.Relational": "7.0.0-rc1-final":
"EntityFramework.Core": "7.0.0-rc1-final"
我的意思是EntityFramework.MicrosoftSqlServer
需要EntityFramework.Relational
,需要EntityFramework.Core
.
您应该另外验证 global.json
包含 "sdk": { "version": "1.0.0-rc1-update1" }
.
UPDATED: 我查看了您上传的测试项目。它有很多小问题。我修改了它。您可以下载修改后的项目here。 别忘了修复 appsettings.json
中使用的 ConnectionString
,它包含我用过的 Server
。
最重要的变化是使用更简单的 BookContext.cs
:
using Microsoft.Data.Entity;
namespace apiservice.Models {
public class BookContext : DbContext {
public DbSet<Author> Authors { get; set; }
public DbSet<Book> Books { get; set; }
}
}
下面的用法SampleData.cs
using System;
using System.Linq;
using Microsoft.Data.Entity;
using Microsoft.Extensions.DependencyInjection;
namespace apiservice.Models
{
public static class SampleData
{
public static void Initialize(IServiceProvider serviceProvider) {
var context=serviceProvider.GetService<BookContext>();
context.Database.Migrate();
if (!context.Books.Any()) {
var austen = context.Authors.Add(
new Author { LastName = "Austen", FirstName = "Jane" }).Entity;
var dickens = context.Authors.Add(
new Author { LastName = "Dickens", FirstName = "Charles" }).Entity;
var cervantes = context.Authors.Add(
new Author { LastName = "Cervantes", FirstName = "Miguel" }).Entity;
context.Books.AddRange(
new Book {
Title = "Pride and Prejudice",
Year = 1813,
Author = austen,
Price = 9.99M,
Genre = "Comedy of manners"
},
new Book {
Title = "Northanger Abbey",
Year = 1817,
Author = austen,
Price = 12.95M,
Genre = "Gothic parody"
},
new Book {
Title = "David Copperfield",
Year = 1850,
Author = dickens,
Price = 15,
Genre = "Bildungsroman"
},
new Book {
Title = "Don Quixote",
Year = 1617,
Author = cervantes,
Price = 8.95M,
Genre = "Picaresque"
}
);
context.SaveChanges();
}
}
}
}
project.json
与以下 dependencies
部分的用法:
{
"dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.Extensions.DependencyInjection": "1.0.0-rc1-final",
"Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final",
"System.Net.Http": "4.0.1-beta-23516",
"Microsoft.Net.Http": "2.2.29",
"Newtonsoft.Json": "8.0.1"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
}
从
修复appsettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
},
"Data": {
"DefaultConnection":{
"ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;"
}
}
}
}
至
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
}
},
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;"
}
}
}
(Data
应该 不在 Logging
之下)
以及下面的用法Startup.cs
using apiservice.Models;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Data.Entity;
namespace apiservice
{
public class Startup
{
public static IConfigurationRoot Configuration {get; set;}
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<BookContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])
);
services.AddMvc();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
// we need to execute the following two commands before
// dnu restore
// dnx ef migrations add Initial
// dnx ef database update
// For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
try
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<BookContext>()
.Database.Migrate();
}
}
catch { }
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
SampleData.Initialize(app.ApplicationServices);
}
// Entry point for the application.
public static void Main(string[] args) => WebApplication.Run<Startup>(args);
}
}
我在 Configure
方法里面的注释中写道,应该执行命令
dnx ef migrations add Initial
dnx ef database update
所有包都恢复后。 dnx ef migrations add Initial
将在项目中创建额外的 Migrations
文件夹,其中包含 20160101205609_Initial.cs
和 BookContextModelSnapshot.cs
等文件。 appsettings.json
中定义的数据库将由 dnx ef database update
创建,并在程序分叉期间用来自 SampleData.cs
的测试数据填充。
顺便说一句,我将 package.json
移到了包文件夹中(与 project.json
处于同一级别)。您不使用这些包,但是移动使 npm 包可见并在 Visual Studio.
中进行管理
我遇到了同样的问题。我在 project.json
文件中添加了以下依赖项:
"dependencies": {
"EntityFramework": "7.0.0-beta4",
"EntityFramework.Core": "7.0.0-rc1-final",
"EntityFramework.SqlServer": "7.0.0-beta8",
"EntityFramework.Commands": "7.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
...
我使用 dnu install EntityFramework
和 dnu install EntityFramework.SqlServer
来安装软件包。 "EntityFramework": "7.0.0-beta4",
由安装程序自动写入 dependencies
节点下。
问题/问题 1:令我惊讶的是,当我为 EntityFramework
引入智能时,我提供的可用版本只有 6.1.3
!
问题 2:当我使用 dnu build
编译我的应用程序时(我在添加 EntityFramework
程序集(.Core
和 .Commands
) 在 dependencies
节点下手动我遇到了一堆编译错误:
The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'.
D:\Projects\aspnet\apiservice\Models\SampleData.cs(12,41): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments
D:\Projects\aspnet\apiservice\Models\SampleData.cs(13,32): DNXCore,Version=v5.0 error CS0308: The non-generic method 'IServiceProvider.GetService(Type)' cannot be used with type arguments
D:\Projects\aspnet\apiservice\Models\SampleData.cs(14,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(15,42): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(17,43): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(19,45): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Authors' and no extension method 'Authors' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(22,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'Books' and no extension method 'Books' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
D:\Projects\aspnet\apiservice\Models\SampleData.cs(61,29): DNXCore,Version=v5.0 error CS1061: 'object' does not contain a definition for 'SaveChanges' and no extension method 'SaveChanges' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
如果我删除 .Core
和 .Commands
程序集引用项目构建正常。
然后我将 EntityFramework.Core
的版本更改为 7.0.0.0
,如错误中所述:
The type 'DbContextOptionsBuilder' is defined in an assembly that is not referenced. You must add a reference to assembly 'EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null'.
但是 dnu restore
现在给了我以下内容:
Unable to locate Dependency EntityFramework.Core >= 7.0.0
Writing lock file D:\Projects\aspnet\apiservice\project.lock.json
Restore complete, 6675ms elapsed
Errors in D:\Projects\aspnet\apiservice\project.json
Unable to locate Dependency EntityFramework.Core >= 7.0.0
我是asp.net 5
Visual Studio code
平台的新手。我不能使用 Visual Studio 2015
因为开发团队的其他成员正在使用 OSX.
这对我来说是一个学习项目。要求非常简单。连接 SQL 服务器数据库,使用 Entity Framework.
提取master-child
关系数据
搞砸了!求助!!
提前致谢
更新
我可以看到
project.json
中所有版本7.0.0-rc1-final
的包的主要变化。我使用 Yeoman 生成器工具来创建项目,但看起来你通过Visual Studio
更正了包。那么,我是否必须手动更新软件包版本并restore
它们?当项目被 Yeoman created/generated 时,默认情况下没有添加
global.json
文件。我可以手动添加它并手动将代码放入其中吗?这行得通吗?我还可以看到一些额外的包引用被添加到
project.json
文件中,这些引用不是 Yeoman 生成器默认添加的——比如Microsoft.AspNet.Tooling.Razor
、Microsoft.Extensions.Logging.Console
、Microsoft.Extensions.Logging.Debug
、Microsoft.Extensions.Logging
等,是否都在项目中得到有效利用?因为生成器没有自动添加它们,所以我可以手动添加它们并使用dnu restore
恢复吗?手动添加对项目有影响吗?
你应该从依赖项中删除 "EntityFramework"
(删除行"EntityFramework": "7.0.0-beta4"
)并使用
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final"
只有。如果添加了 "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
,则不需要显式添加 "EntityFramework.Core": "7.0.0-rc1-final"
,因为存在以下依赖关系:
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final":
"EntityFramework.Relational": "7.0.0-rc1-final":
"EntityFramework.Core": "7.0.0-rc1-final"
我的意思是EntityFramework.MicrosoftSqlServer
需要EntityFramework.Relational
,需要EntityFramework.Core
.
您应该另外验证 global.json
包含 "sdk": { "version": "1.0.0-rc1-update1" }
.
UPDATED: 我查看了您上传的测试项目。它有很多小问题。我修改了它。您可以下载修改后的项目here。 别忘了修复 appsettings.json
中使用的 ConnectionString
,它包含我用过的 Server
。
最重要的变化是使用更简单的 BookContext.cs
:
using Microsoft.Data.Entity;
namespace apiservice.Models {
public class BookContext : DbContext {
public DbSet<Author> Authors { get; set; }
public DbSet<Book> Books { get; set; }
}
}
下面的用法SampleData.cs
using System;
using System.Linq;
using Microsoft.Data.Entity;
using Microsoft.Extensions.DependencyInjection;
namespace apiservice.Models
{
public static class SampleData
{
public static void Initialize(IServiceProvider serviceProvider) {
var context=serviceProvider.GetService<BookContext>();
context.Database.Migrate();
if (!context.Books.Any()) {
var austen = context.Authors.Add(
new Author { LastName = "Austen", FirstName = "Jane" }).Entity;
var dickens = context.Authors.Add(
new Author { LastName = "Dickens", FirstName = "Charles" }).Entity;
var cervantes = context.Authors.Add(
new Author { LastName = "Cervantes", FirstName = "Miguel" }).Entity;
context.Books.AddRange(
new Book {
Title = "Pride and Prejudice",
Year = 1813,
Author = austen,
Price = 9.99M,
Genre = "Comedy of manners"
},
new Book {
Title = "Northanger Abbey",
Year = 1817,
Author = austen,
Price = 12.95M,
Genre = "Gothic parody"
},
new Book {
Title = "David Copperfield",
Year = 1850,
Author = dickens,
Price = 15,
Genre = "Bildungsroman"
},
new Book {
Title = "Don Quixote",
Year = 1617,
Author = cervantes,
Price = 8.95M,
Genre = "Picaresque"
}
);
context.SaveChanges();
}
}
}
}
project.json
与以下 dependencies
部分的用法:
{
"dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.Extensions.DependencyInjection": "1.0.0-rc1-final",
"Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final",
"System.Net.Http": "4.0.1-beta-23516",
"Microsoft.Net.Http": "2.2.29",
"Newtonsoft.Json": "8.0.1"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel",
"ef": "EntityFramework.Commands"
},
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
}
从
修复appsettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
},
"Data": {
"DefaultConnection":{
"ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;"
}
}
}
}
至
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Verbose",
"System": "Information",
"Microsoft": "Information"
}
},
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=localhost;Database=BookStore;User Id=sa; Password=******;Trusted_Connection=true;"
}
}
}
(Data
应该 不在 Logging
之下)
以及下面的用法Startup.cs
using apiservice.Models;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Data.Entity;
namespace apiservice
{
public class Startup
{
public static IConfigurationRoot Configuration {get; set;}
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<BookContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])
);
services.AddMvc();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
// we need to execute the following two commands before
// dnu restore
// dnx ef migrations add Initial
// dnx ef database update
// For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
try
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<BookContext>()
.Database.Migrate();
}
}
catch { }
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
SampleData.Initialize(app.ApplicationServices);
}
// Entry point for the application.
public static void Main(string[] args) => WebApplication.Run<Startup>(args);
}
}
我在 Configure
方法里面的注释中写道,应该执行命令
dnx ef migrations add Initial
dnx ef database update
所有包都恢复后。 dnx ef migrations add Initial
将在项目中创建额外的 Migrations
文件夹,其中包含 20160101205609_Initial.cs
和 BookContextModelSnapshot.cs
等文件。 appsettings.json
中定义的数据库将由 dnx ef database update
创建,并在程序分叉期间用来自 SampleData.cs
的测试数据填充。
顺便说一句,我将 package.json
移到了包文件夹中(与 project.json
处于同一级别)。您不使用这些包,但是移动使 npm 包可见并在 Visual Studio.