我有两个“仅代码”POCO使用EF4和最新的CTP,针对现有的旧数据库运行。对PocoA运行LINQ查询一直有效,直到我将下面的属性添加到该对象,我试图添加一个关系。
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 :(得分:47)
如果您的DbContext类公开多个DbSet< T>,则会发生此错误。 T出现不止一次的属性。基本上它无法弄清楚T类型的实例属于哪个DbSet。
在代码中,错误可能如下所示:
public class MyContex : DbContext {
public DbSet<PocoA> PocoA { get; set; }
public DbSet<PocoA> PocoB { get; set; } ...
其中最后一行应该是DbSet&lt; PocoB&gt;而不是DbSet&lt; PocoA&gt;
TL; DR - 您在DbSet中复制粘贴了一个属性并且忘了更改类型参数。