我正在使用具有自定义数据库初始化程序的Entity Framework 4.3 Code First,代码如下:
public class MyContext : DbContext
{
public MyContext()
{
Database.SetInitializer(new MyContextInitializer());
}
}
public class MyContextInitializer : CreateDatabaseIfNotExists<MyContext>
{
protected override void Seed(MyContext context)
{
// Add defaults to certain tables in the database
base.Seed(context);
}
}
每当我的模型更改时,我都会手动编辑我的 POCO 类和映射,并手动更新数据库。重新运行应用程序后,我会遇到以下错误:
'/' 应用程序中的服务器错误。
自创建数据库以来,“MyContext”上下文的支持模型已更改。考虑使用 Code First Migrations 更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
描述:在当前 Web 请求执行过程中发生未处理的异常。有关该错误的更多信息和其代码原始位置,请查看堆栈跟踪。
异常详细信息:System.InvalidOperationException:自创建数据库以来,“MyContext”上下文的支持模型已更改。考虑使用 Code First Migrations 更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
使用 EFProfiler,我还注意到这些查询正在被执行:-- statement #1
SELECT [GroupBy1].[A1] AS [C1]
FROM (SELECT COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]) AS [GroupBy1]
-- statement #2
SELECT TOP (1) [Project1].[C1] AS [C1],
[Project1].[MigrationId] AS [MigrationId],
[Project1].[Model] AS [Model]
FROM (SELECT [Extent1].[MigrationId] AS [MigrationId],
[Extent1].[CreatedOn] AS [CreatedOn],
[Extent1].[Model] AS [Model],
1 AS [C1]
FROM [dbo].[__MigrationHistory] AS [Extent1]) AS [Project1]
ORDER BY [Project1].[CreatedOn] DESC
我该如何防止这种情况发生?
CreateDatabaseIfNotExists
除了if (!context.Database.Exists()) { context.Database.Create(); Seed(context); }
什么都不做吗? - Kristof ClaesSeed(context)
之后,最重要的缺失部分是context.SaveChanges();
。感谢您指引我正确的方向! - Kristof Claes