2010-03-11 76 views
1

我有一個數據庫框架,我有兩個表。第一個表中有一列是一個標識和主鍵。第二個表格包含兩列。一個是varchar主鍵,另一個是第一個表的可空外鍵。實體框架不喜歡0..1到*關係

當添加表到模型中,我得到了以下驗證錯誤:

條件不能爲列成員「DetailsControlSetId」中指定,因爲它是標有「計算」或「身份」 StoreGeneratedPattern。

其中「DetailsControlSetId」是在所述第二表中的第二外鍵引用。

重現步驟:

1)創建與Visual Studio 2010 RC一個新的.NET 3.5客戶端配置文件的項目。
2)對測試數據庫運行以下腳本(空數據庫將執行)。
3)創建EDMX模型,定位創建的數據庫,但選擇不導入任何表。
4)從數據庫更新模型選擇數據庫中的兩個表(DetailsControlSet和Application)。
5)驗證EDMX模型。

表創建腳本:

CREATE TABLE [dbo].[DetailsControlSet](
    [DetailsControlSetId] [int] IDENTITY(1,1) NOT NULL, 
    CONSTRAINT [PK_DetailsControlSet] PRIMARY KEY CLUSTERED 
    (
     [DetailsControlSetId] ASC 
    ) 
) 

GO 

CREATE TABLE [dbo].[Application](
    [ApplicationName] [varchar](50) NOT NULL, 
    [DetailsControlSetId] [int] NULL, 
    CONSTRAINT [PK_Application] PRIMARY KEY CLUSTERED 
    (
     [ApplicationName] ASC 
    ) 
) 

GO 

ALTER TABLE [dbo].[Application] WITH CHECK ADD CONSTRAINT [FK_Application_DetailsControlSet] FOREIGN KEY([DetailsControlSetId]) 
REFERENCES [dbo].[DetailsControlSet] ([DetailsControlSetId]) 
ON UPDATE CASCADE 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[Application] CHECK CONSTRAINT [FK_Application_DetailsControlSet] 
GO 
+0

外鍵列是實際存儲生成的還是設計者錯誤地導入模型?另外,您正在使用哪個版本的Visual Studio? – Rory 2010-03-11 19:37:52

+0

Duplicate:http://stackoverflow.com/questions/2410590/what-is-the-proper-way-to-create-a-recursive-entity-in-the-entity-framework @Orion,請回答問題I問你原來的問題,而不是重新發布同樣的事情。 – 2010-03-11 19:42:52

+0

嗯,這個的重複:http://stackoverflow.com/questions/2382135/recursive-entity-causing-all-sorts-of-problems – 2010-03-11 19:43:34

回答

2

更新貼現在你已經(最後!)張貼步驟來重現這一點,我可以讓我的錯誤發生機。並且,「最初導入所有內容」與「後來導入表格」模型的EDMX使得問題變得明顯。 「工作」模式有這樣一行:

<Property Name="DetailsControlSetId" Type="int" /> 

的「錯誤」模式有這樣一行:

<Property Name="DetailsControlSetId" Type="int" StoreGeneratedPattern="Identity" /> 

這兩款車型之間的唯一實質性的區別。

因此,要解決這個問題:

  1. 右擊EDMX在Solution Explorer。
  2. 用XML編輯器打開。
  3. 刪除StoreGeneratedPattern="Identity"
  4. 請注意,錯誤立即消失。

有了這個測試情況下,我能夠做一些研究。原來是this is a known bug in VS 2010 beta and was fixed a few days ago

+0

我知道模型中的差異以及如何手動修復它。我正在尋找根本原因。感謝您發現這是一個錯誤的研究。 – 2010-03-19 17:42:38

0

這篇文章可能會有所幫助,在ADO.NETofficial團隊博客

+0

不幸的是,這是我已經知道的所有基本信息。我不是在尋找如何設置一個基本的實體,而是如何設置這個0..1到*的關係。 – 2010-03-11 20:14:55

+1

您的示例數據庫腳本已正確適用於我。我將它應用到一個空的數據庫並生成了一個EF模型。沒有錯誤。 – 2010-03-11 21:49:41