2011-03-28 86 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