2010-08-24 32 views
17

我有兩個「僅限代碼」的POCO使用EF4和最新的CTP,針對現有的傳統數據庫運行。對PocoA運行一個LINQ查詢,直到我將下面的屬性添加到該對象,我試圖添加一個關係。實體框架4僅限代碼錯誤「不支持多種對象集合」

public virtual PocoB pocoB { get; set; } 

一旦我做到了,我開始收到以下錯誤:

Multiple object sets per type are not supported. The object sets 'PocoA_DbSet' and 'PocoB_DbSet' can both contain instances of type 'PocoA'.

所以我接下來想我的問題是,因爲我沒有定義的關係,而這種傳統的數據庫使用'fk/pk'前綴,而不是主鍵和外鍵上的'Id'後綴。因此,我增加了以下數據註解上面指定的虛方法,用任何變化:

[RelatedTo(Property="PocoB", ForeignKey="fkPocoB")] 

我真的在爲需要更改,使這項工作有什麼損失。

+0

你可以提供你的'PocoA'和'PocoB'類。此外,任何相關的映射類。 – Charlino 2010-08-24 19:43:17

+5

發現問題。這是一個錯字。我的PocoB的DbSet類被聲明爲'DbSet '。 – 2010-08-24 20:12:21

+15

你應該發佈你的解決方案作爲答案,並接受它......這將把這個問題從未答覆的列表:) – forsvarir 2011-05-27 07:39:31

回答

46

如果您的DbContext類公開多個DbSet <T>屬性,其中T發生多次,則會發生此錯誤。基本上它不能確定T類型的實例屬於哪個DbSet。

在代碼中,錯誤很可能是這樣的:

public class MyContex : DbContext { 
    public DbSet<PocoA> PocoA { get; set; } 
    public DbSet<PocoA> PocoB { get; set; } ... 

這裏是最後一行應該已經DbSet <PocoB>而不是DbSet <PocoA>

TL; DR - 複製 - 一個財產,忘記更改DbSet中的類型參數

+1

感謝您的跟進:)讓我頭疼:) – 2012-08-04 04:16:08

+2

剛剛受到同樣的事情,由於複製+粘貼。這節省了我一些時間。 – joelmdev 2013-10-17 19:40:57

+0

同樣的問題。我做了同樣的事情。複製粘貼! – 2016-12-23 07:38:18