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