我们在Visual Studio 2010上使用Entity Framework 4 RC和DB2 V9.7.3.4。我也有VS加载项,可以在Server Explorer中看到DB2数据库。我创建了一个非常简单的VS控制台项目,它可以很好地对抗SQL Server,所以我知道它是有效的。我在项目中引用了“IBM.Data.DB2.9.7.3”和“IBM.Data.DB2.Entity”。
在app.config中我的连接字符串是:
<add name="ProductContext"
providerName="IBM.Data.DB2"
connectionString="Database=DB2TEST;User ID=XXXX;PWD=XXXX;Server=XXXX;Persist Security Info=True;"/>
我的代码中的第一个语句是数据库初始化程序:
DbDatabase.SetInitializer<ProductContext>(new DropCreateDatabaseIfModelChanges<ProductContext>());
在运行期间,当我到达导致更改数据上下文的行时,我收到错误:
无法检查模型兼容性 因为数据库不包含 模型元数据。
由于我请求删除数据库,因此这似乎不是一个逻辑错误。有谁知道原因是什么?
答案 0 :(得分:0)
我会先尝试从CreateDatabaseIfNotExists继承,这会将EdmMetadata表添加到架构中。我认为错误是EF说它无法找到该表。
所以
DbDatabase.SetInitializer<ProductContext>(new CreateDatabaseIfNotExists<ProductContext>());
运行一次,然后在EdmMetadata表存在后更改为DropCreateDatabaseIfModelChanges。
答案 1 :(得分:0)
尝试删除IncludeMetadataConvention,如下所示:modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
要避免“dbo”问题,只需使用DataAnnotation属性或Fluent映射映射所有实体:
[Table("Product", SchemaName = "MySchema")]
public class Category { //DataAnnotoaion approach
modelBuilder.Entity<Category>().ToTable("Categories", "MySchema"); //Fluent approach