我有两个使用EF4和最新CTP的“仅代码” POCO,针对现有的旧数据库运行。在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")]
我真的不知所措,需要进行一些更改才能使此工作正常进行。
最佳答案
如果您的DbContext类公开了多个DbSet 属性(其中T多次出现),则会发生此错误。基本上,它无法确定类型T的实例属于哪个DbSet。
在代码中,错误可能看起来像这样:
public class MyContex : DbContext {
public DbSet<PocoA> PocoA { get; set; }
public DbSet<PocoA> PocoB { get; set; } ...
最后一行应该是DbSet 而不是DbSet
TL; DR -您复制粘贴了属性,而却忘记了在DbSet中更改类型参数。
关于c# - Entity Framework 4仅代码错误 “Multiple objects sets per type are not supported”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3560091/