2011-05-11 181 views
0

我正在使用實體框架4.1,並且無法在linqpad上添加連接,它說我的子實體沒有定義實體鍵。消息是:「實體類型」CashierPaymentType「沒有定義密鑰,爲此實體類型定義密鑰。」 我想這是發生在我的子表有複合鍵的時候。 實施例:實體類型「EntityName」沒有定義鍵。定義此實體類型的密鑰

表:出納 ID INT(密鑰) 名稱VARCHAR(100)

表:PaymentType ID INT(密鑰) 名稱VARCHAR(100)

//我認爲這是問題! 表:CashierPaymentType CashierID INT(鍵)(外鍵) PaymentTypeID INT(鍵)(外鍵) 價格SMALLMONEY

我使用linqpad 4.35.1

任何幫助嗎?

回答

2

的問題是,你告訴LINQPad新的您鍵入的DbContext與提供商連接字符串,而不是一個實體框架的連接字符串

如果使用提供程序連接字符串構造類型化的DbContext,則在Visual Studio中會出現相同的錯誤。

只有在代碼優先的情況下(在這種情況下EF推斷模型),提供程序連接字符串纔有效。在你的情況下,EDM是你的項目的一部分,並嵌入你的程序集;

metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=TestDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework" 

另一種解決方案是使用下面的連接字符串,會推遲到app.config文件:所以在你的app.config規定,使EF可以找到它,你必須指定完整EF連接字符串

name=TestDatabaseEntities 

如果你在LINQPad中這樣做,請確保在提供的文本框中告訴它app.config文件的位置。

一個更微妙的一點是,你的DbContext的T4文件到VS創造,在你的DbContext缺少以下代碼默認值不同:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    throw new UnintentionalCodeFirstException(); 
} 

如果覆蓋時,它給如果指定錯誤類型的連接字符串,則會提供更有用的錯誤消息。

相關問題