使用CTP4,我曾经能够执行以下操作(suggested by ptrandem):
modelBuilder.IncludeMetadataInDatabase = false
使用这行代码,EF不会在我的数据库中创建EdmMetadata表,也不会跟踪模型更改。
我无法在新的CTP5中找到实现这一目标的方法,所以现在每次我更改模型时,我都会得到:
支持'MyContext'的模型 自数据库以来,上下文已经改变 创建了。手动 删除/更新数据库,或者调用 Database.SetInitializer with IDatabaseInitializer实例。对于 例如, DropCreateDatabaseIfModelChanges 策略会自动删除和 重新创建数据库,也可以选择 用新数据播种。
那么,是否每个人都知道CTP5中的IncludeMetadataInDatabase属性在哪里?感谢。
答案 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(...)