2

谁能告诉我将实体框架模型元数据保存在数据库表中的真正好处(它使用默认约定)?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
}

我可以将其关闭,并且我认为它使数据库看起来更干净。但这对性能有一些负面影响吗?

我只使用代码。

谢谢!

4

2 回答 2

1

这将创建EdmMetadata包含当前模型哈希的表。每次您创建派生的实例DbContext并想要访问数据库时,上下文都会执行特殊查询以获取存储的哈希。然后上下文将当前模型的哈希值与检索到的哈希值进行比较。如果散列不同,它要么执行数据库初始化程序,要么引发异常。使用此功能时,您可以例如定义初始化程序:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyComtext>());

如果模型更改,此初始化程序将删除数据库并创建新数据库。它使代码优先开发变得更加简单,但它是您不能在生产中使用的东西。您还可以派生一个初始化程序并创建自己的一个覆盖Seed方法。您可以使用Seed方法来初始化您的数据库。

于 2011-03-22T08:20:20.197 回答
1

这对于应用程序的可扩展性和可维护性非常重要。它为 EF 提供了通知架构更改并相应地修改数据库的功能。因此,您可以更改模型代码而不必担心更新数据库。

如果你确定你永远不会改变模型的结构,那么你可以删除它。

于 2011-03-22T00:03:30.530 回答