实体框架代码第一关系映射问题

时间:2011-03-21 23:59:37

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

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

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

我可以将其关闭,我认为它使数据库更清晰。但这会对性能产生一些负面影响吗?

我正在使用Code Only。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

如果您确定永远不会更改模型的结构,则可以将其删除。

答案 1 :(得分:1)

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

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

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