【问题标题】:ASP.NET vNext MVC and Entity Framework issuesASP.NET vNext MVC 和实体框架问题
【发布时间】:2023-03-03 00:42:01
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    在您试用 EF7 时,请记住,这是新 EF 代码库开发的一个非常早期的阶段,有许多功能已部分实现或尚不可用。

    我相信SetInitializer 是完全不同的实现方式之一;团队正在避免使用静态方法以提高框架的可测试性。

    还要注意latest version of EF77.0.0-beta3,但wiki 提供了有关how to use the nightly builds 的信息。 (考虑到自 VS2015 CTP6 发布以来的严重变化,使用夜间构建可能会很粗糙。)

    【讨论】:

    • 那么SetInitializer的替代品是什么?这个答案实际上似乎并没有为我回答这个问题。我仍然不确定如何获得相当于DropCreateDatabaseIfModelChanges
    【解决方案2】:

    EF7 更加轻量级和模块化,可支持新平台和非关系数据存储。这些变化是非常基础的,因此一些底层 API 发生了变化,包括它们的命名空间。

    新的轻量级特性意味着与以前的版本相比,幕后自动发生的事情更少。 数据库初始化器已被移除,因此不会按需创建数据库。相反,您应该使用 Database Migrations 自己控制此过程。欲了解更多信息:ASP.NET vNext (MVC6) Ground Up #3 - Entity Framework 7

    【讨论】:

    • 我确实在使用数据库迁移。从代码中应用这些迁移的常用方法之一是使用Database.SetInitializer 方法。您是否建议 CLI 是从 Core 执行此操作的唯一方法?
    • @MEMark 你可以从代码中调用迁移,见stackoverflow.com/questions/37780136/…
    • 谢谢。所以简而言之,只需使用dbContext.Database.Migrate();
    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 2010-09-25
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多