ASP.NET vNext MVC和实体框架问题

时间:2015-04-26 09:15:53

标签: entity-framework asp.net-core entity-framework-core

我正在尝试创建一个小的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方法。

2 个答案:

答案 0 :(得分:4)

由于EF7仍处于预发布状态,因此您在MSDN文章中找不到任何相关文档;您需要查看EF7 GitHub Wiki以获取任何信息。

  

在试用EF7时请注意,这是新EF代码库开发的早期阶段,有许多功能部分实现或尚未提供。

我认为SetInitializer是完全不同的事情之一;团队正在避免使用静态方法来提高框架的可测试性。

另请注意,latest version of EF77.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