ASP.NET vNext MVC 和 Entity Framework 问题
ASP.NET vNext MVC and Entity Framework issues
我正在尝试创建一个 ASP.NET vNext WebAPI + AngularJS + Entity Framework 项目。但显然,EF7 中发生了很多变化,所以我遇到了以下问题:
我将 project.json
更改如下:
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
"EntityFramework": "7.0.0-beta1",
"EntityFramework.SqlServer": "7.0.0-beta1",
"EntityFramework.Commands": "7.0.0-beta1",
"Microsoft.AspNet.Mvc": "6.0.0-beta1",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
"Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta1"
在我的 DataContext class 中,我正在尝试以下操作:
using System;
using Project1.Models;
using Microsoft.Data.Entity;
namespace Project1.DataAccess
{
public class DataContext
{
public DbSet<Website> Websites { get; set; }
public DataContext()
{
Microsoft.Data.Entity.Infrastructure.Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DataContext>());
//Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());
}
}
}
}
首先:为什么命名空间 System.Data.Entity
更改为 Microsoft.Data.Entity
?我在任何 Microsoft MSDN 文章中都找不到有关此更改的任何信息!!
其二:整个Database.SetInitializer
不行了。它建议使用 Microsoft.Data.Entity.Infrastructure
命名空间,但数据库 class 不包含 SetInitializer
方法。
因为 EF7 仍处于预发布阶段,您在 MSDN 文章中还找不到任何关于它的文档;您需要查看 EF7 GitHub Wiki 以获取任何信息。
As you try out EF7 please bear in mind that this is a very early stage in the development of the new EF codebase and there are many features that are partially implemented or not yet available.
我相信 SetInitializer
是完全不同的实施方式之一;该团队正在避免静态方法以提高框架的可测试性。
还要注意latest version of EF7 is 7.0.0-beta3
, but the wiki provides information on how to use the nightly builds。 (考虑到自 VS2015 CTP6 发布以来的巨大变化,使用夜间构建可能会很粗糙。)
EF7 更加轻量级和模块化,以支持新平台和非关系数据存储。这些更改非常基础,因此一些底层 API 已更改,包括它们的命名空间。
新的轻量级性质意味着与以前的版本相比,幕后自动发生的事情更少。 数据库初始化程序 已被删除,因此不会按需创建数据库。相反,您应该使用 Database Migrations 自行控制此过程。更多信息:ASP.NET vNext (MVC6) Ground Up #3 - Entity Framework 7
我正在尝试创建一个 ASP.NET vNext WebAPI + AngularJS + Entity Framework 项目。但显然,EF7 中发生了很多变化,所以我遇到了以下问题:
我将 project.json
更改如下:
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
"EntityFramework": "7.0.0-beta1",
"EntityFramework.SqlServer": "7.0.0-beta1",
"EntityFramework.Commands": "7.0.0-beta1",
"Microsoft.AspNet.Mvc": "6.0.0-beta1",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
"Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta1"
在我的 DataContext class 中,我正在尝试以下操作:
using System;
using Project1.Models;
using Microsoft.Data.Entity;
namespace Project1.DataAccess
{
public class DataContext
{
public DbSet<Website> Websites { get; set; }
public DataContext()
{
Microsoft.Data.Entity.Infrastructure.Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DataContext>());
//Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());
}
}
}
}
首先:为什么命名空间 System.Data.Entity
更改为 Microsoft.Data.Entity
?我在任何 Microsoft MSDN 文章中都找不到有关此更改的任何信息!!
其二:整个Database.SetInitializer
不行了。它建议使用 Microsoft.Data.Entity.Infrastructure
命名空间,但数据库 class 不包含 SetInitializer
方法。
因为 EF7 仍处于预发布阶段,您在 MSDN 文章中还找不到任何关于它的文档;您需要查看 EF7 GitHub Wiki 以获取任何信息。
As you try out EF7 please bear in mind that this is a very early stage in the development of the new EF codebase and there are many features that are partially implemented or not yet available.
我相信 SetInitializer
是完全不同的实施方式之一;该团队正在避免静态方法以提高框架的可测试性。
还要注意latest version of EF7 is 7.0.0-beta3
, but the wiki provides information on how to use the nightly builds。 (考虑到自 VS2015 CTP6 发布以来的巨大变化,使用夜间构建可能会很粗糙。)
EF7 更加轻量级和模块化,以支持新平台和非关系数据存储。这些更改非常基础,因此一些底层 API 已更改,包括它们的命名空间。
新的轻量级性质意味着与以前的版本相比,幕后自动发生的事情更少。 数据库初始化程序 已被删除,因此不会按需创建数据库。相反,您应该使用 Database Migrations 自行控制此过程。更多信息:ASP.NET vNext (MVC6) Ground Up #3 - Entity Framework 7