c# - Entity Framework 代码优先关系映射问题

标签 c# entity-framework ef-code-first entity-framework-4.1

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

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

我可以将其关闭,而且我认为它可以让数据库看起来更干净。但这是否会对性能产生一些负面影响?

我只使用代码。

谢谢!

最佳答案

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

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

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

关于c# - Entity Framework 代码优先关系映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5385165/

相关文章:

c# - 是否接受使用私有(private)方法来避免构造函数中的虚拟成员?

database - 将 3 个表关系映射到单个实体。 ORM 最佳实践?

c# - 已设置 EF6 'DbConfigurationClass' 但未发现此类型 - 多个 DbContexts 和 DbConfigurations

c# linq 在 tph 中获取数据库中项目的类型

.net - EF 模型优先还是代码优先方法?

c# - 没有编码的 ASP.NET MVC Razor 渲染

c# - Web API - 如何在 Controller DateTime ('dd/MM/yyyy' 中接收作为 Url 参数?

c# - 唯一ID号C#

asp.net - 使用 Entity Framework 在 ListView 中分页

entity-framework - 术语 'Update-Database' 未被识别为 cmdlet 的名称