实体框架4和DB2:数据库生成错误

时间:2011-03-28 22:07:21

标签: entity-framework-4 db2

我们在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>());

在运行期间,当我到达导致更改数据上下文的行时,我收到错误:

  

无法检查模型兼容性   因为数据库不包含   模型元数据。

由于我请求删除数据库,因此这似乎不是一个逻辑错误。有谁知道原因是什么?

2 个答案:

答案 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