gpt4 book ai didi

ef-code-first - EF 4.1 代码优先和现有数据库和 .NET 成员资格

转载 作者:行者123 更新时间:2023-12-04 05:08:54 26 4
gpt4 key购买 nike

我的开发盒上有一个名为 ApplicationName_Development 的数据库,该数据库在 SQL Server 2008 R2 开发版上运行。

我将 .NET 成员资格表添加到数据库中,没有任何问题。当我尝试让 Code First 工作时,我收到以下错误消息:

The server encountered an error processing the request. The exception message is "Model compatibility cannot be checked because the database does not contain model metadata. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.



经过一番谷歌搜索,我发现我必须删除数据库并让EF创建数据库。没关系,但我丢失了所有 .NET 成员资格表。我可以返回并再次添加成员资格表,但如果我的模型发生更改并且 EF 需要重新创建数据库,那么我必须再次添加成员资格表。

我该如何解决这个问题?

最佳答案

这就是代码优先的工作方式。代码优先的主要思想是你不要接触你的数据库,因为创建数据库是模型的责任。如果您想自定义您的数据库,您必须创建自定义 IDatabaseInitializer并添加您的自定义 SQL。

public class MyDbInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
protected override void Seed(MyContext context)
{
// Here run your custom SQL commands
context.Database.ExecuteSqlCommand("CREATE TABLE ....");
}
}

现在你只需要在你的应用程序启动时设置你的 cutom 初始化器:
Database.SetInitializer<MyContext>(new MyDbInitializer());

如果您不想这样做,则必须手动维护数据库并将初始化程序设置为 null。

关于ef-code-first - EF 4.1 代码优先和现有数据库和 .NET 成员资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com