我正在使用带有 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);
}