如何一劳永逸地停止实体框架 6 中的迁移



我正在使用带有 ASP.NET MVC 5应用程序的实体框架6。我不想在我的项目中使用代码优先的方法。

我创建了一个新项目,但从未启用迁移。我创建了一个名为MyContext的新类,它扩展了DbContext类。这是我在构造函数MyContext

public MyContext()
    : base(ConnectionName)
{
        Database.SetInitializer<MyContext>(null);
}

但是,每次我首次使用该应用程序时,我都会在Debug output屏幕中看到以下输出。

SELECT Count(*)
FROM INFORMATION_SCHEMA.TABLES AS t...

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
    WHERE [Extent1].[ContextKey] = @p__linq__0
)  AS ......

如何在应用程序中真正停止迁移?

如果确实没有Migrations文件夹,也没有Configuration.cs文件,我认为您唯一错过的是数据库初始值设定项。即使您使用 Database.SetInitializer<MyContext>(null); 禁用数据库初始化,也可以使用配置文件对其进行配置:

要使用配置文件禁用它,请添加(源(:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>    
        <add key="DatabaseInitializerForType MyNamespace.MyDbContext, MyNamespace" 
             value="Disabled" />
    </appSettings>
</configuration>
有很多

例子。您需要做的第一件事是通过 nuget 安装电动工具,然后如果您已经有数据库,请使用逆向工程向导。如果您从头开始,也请查看以下内容:EF DB First

这将为您创建正确的上下文等。

如果您使用的是.NET Core,请查看此链接

.net 核心逆向工程

问题是这条线

Database.SetInitializer<MyContext>(null);

需要在静态构造函数中,而不是实例构造函数中! :)

所以这样做:

static MyContext()
{
        Database.SetInitializer<MyContext>(null);
}

相关内容

  • 没有找到相关文章

最新更新