2011-03-21 145 views
2

任何人都可以告诉我将Entity Framework模型元数据保留在数据库表中的真正好处吗(它使用默认约定来执行此操作)?实体框架代码第一关系映射问题

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

我可以把它关掉,我认为它使得数据库更清洁。但是这会对性能产生一些负面影响吗?

我正在使用Code Only。

谢谢!

回答

1

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

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

这初始化将删除数据库和创建模式是否改变新的。它使代码的第一次开发更加简单,但它是您不能在生产中使用的东西。你也可以派生一个初始化器并创建一个自己的方法来覆盖Seed方法。您可以使用Seed方法来初始化您的数据库。

1

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

如果您确定自己永远不会改变模型的结构,那么您可以将其删除。

+0

你能详细说一下吗?我使用Code Only,据我所知,Code Code Model的任何修改都意味着数据库必须手动修改(或者在没有数据的情况下重建),并且无论EF设置何时设置,代码模型和数据库模型不再同步。 – Jamie 2011-03-22 00:07:44