我正在尝试创建一个小的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类中,我正在尝试以下方法:
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
命名空间,但该Database类不包含SetInitializer
方法。
答案 0 :(得分:4)
由于EF7仍处于预发布状态,因此您在MSDN文章中找不到任何相关文档;您需要查看EF7 GitHub Wiki以获取任何信息。
在试用EF7时请注意,这是新EF代码库开发的早期阶段,有许多功能部分实现或尚未提供。
我认为SetInitializer
是完全不同的事情之一;团队正在避免使用静态方法来提高框架的可测试性。
另请注意,latest version of EF7为7.0.0-beta3
,但维基会提供有关how to use the nightly builds的信息。 (鉴于自VS2015 CTP6发布以来的严重变化,使用夜间构建可能会很粗糙。)
答案 1 :(得分:4)
EF7更轻巧,更模块化,支持新平台和非关系数据存储。这些更改非常重要,因此一些底层API已发生变化,包括其命名空间。
新的轻量级特性意味着与以前的版本相比,幕后会自动发生更少的事情。 数据库初始化程序已被删除,因此不会按需创建数据库。相反,您应该使用数据库迁移自行控制此过程。有关详细信息:ASP.NET vNext (MVC6) Ground Up #3 - Entity Framework 7