2011-03-28 78 views
0

我们正在使用实体框架4 RC上的Visual Studio 2010和DB2版本9.7.3.4。我也有VS加载项,并可以在服务器浏览器中看到DB2数据库。我创建了一个VS控制台项目非常简单,它的工作原理针对SQL Server罚款,所以我知道它是有效的。我不得不“IBM.Data.DB2.9.7.3”和“IBM.Data.DB2.Entity”在我的项目引用。实体框架4和DB2:数据库生成错误

在App.config中我connnection字符串是:

<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>()); 

在运行时,当我到达并导致线路更改数据方面,我得到的错误:

Model compatibility cannot be checked because the database does not contain model metadata.

因为我要求该数据库是博士opped,这似乎不是一个逻辑错误。有谁知道原因可能是什么?

+0

你有权限检查数据库的存在和该数据库中的表? – 2011-03-28 22:11:43

+0

用户是数据库的管理员。 – dewmangolf 2011-03-29 14:01:20

回答

0

我会尝试从CreateDatabaseIfNotExists第一继承,这将EdmMetadata表添加到模式。我相信这个错误是EF说它找不到那张表。

所以

DbDatabase.SetInitializer<ProductContext>(new CreateDatabaseIfNotExists<ProductContext>()); 

运行一次,然后换DropCreateDatabaseIfModelChanges一旦EdmMetadata表存在。

+0

感谢您的建议。当我这样做时,执行db.SaveChanges()时会引发错误。 InnerException是:{“错误[42704] [IBM] [DB2/NT] SQL0204N \”DBO.CATEGORIES \“是一个未定义的名称。SQLSTATE = 42704 \ r \ n”}。这听起来好像数据库存在并且表不存在。但是一个新的数据库不会被创建或保留。有没有人有成功在DB2中生成数据库? – dewmangolf 2011-03-30 15:16:28

0

尝试取出IncludeMetadataConvention这样的:modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
避免“DBO”的问题,即使用DataAnnotation属性或流利的映射所有实体只是映射:

[Table("Product", SchemaName = "MySchema")] 
public class Category { //DataAnnotoaion approach 

modelBuilder.Entity<Category>().ToTable("Categories", "MySchema"); //Fluent approach