EF CTP5中的modelBuilder.IncludeMetadataInDatabase在哪里?

时间:2010-12-19 19:01:37

标签: entity-framework-4

使用CTP4,我曾经能够执行以下操作(suggested by ptrandem):

modelBuilder.IncludeMetadataInDatabase = false

使用这行代码,EF不会在我的数据库中创建EdmMetadata表,也不会跟踪模型更改。

我无法在新的CTP5中找到实现这一目标的方法,所以现在每次我更改模型时,我都会得到:

  

支持'MyContext'的模型   自数据库以来,上下文已经改变   创建了。手动   删除/更新数据库,或者调用   Database.SetInitializer with   IDatabaseInitializer实例。对于   例如,   DropCreateDatabaseIfModelChanges   策略会自动删除和   重新创建数据库,也可以选择   用新数据播种。

那么,是否每个人都知道CTP5中的IncludeMetadataInDatabase属性在哪里?感谢。

4 个答案:

答案 0 :(得分:11)

CTP5包含一个非常酷的功能,称为 Pluggable Conventions ,可用于添加/删除约定。 IncludeMetadataInDatabase已被移除并被替换为 可插拔的约定,为您做同样的事情:

modelBuilder.Conventions
            .Remove<System.Data.Entity.Database.IncludeMetadataConvention>();

答案 1 :(得分:3)

CTP5中用于关闭初始化程序逻辑的等效项:在Global.asax的Application_Start中,输入以下内容:

System.Data.Entity.Database.DbDatabase.SetInitializer<MyDBContext>(null);

答案 2 :(得分:3)

在EF 4.1中

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

答案 3 :(得分:1)

一直在寻找这个,我必须在发布我的问题后立即找到答案,DUH。从ADO.NET team blog开始:

  

在CTP5中,我们已经不再需要了   执行其他配置时   映射到现有数据库。如果   Code First检测到它正在指向   到它的现有数据库模式   没有创造那么它会“信任”   你'并尝试先使用代码   与架构。最简单的方法   点代码首先是现有的   数据库是添加App / Web.config   具有相同名称的连接字符串   作为派生的DbContext(...)