实体框架4仅代码错误"不支持每种类型的多个对象集"

Don*_*hes 17 .net c# asp.net-mvc entity-framework entity-framework-4

我有两个"仅代码"POCO使用EF4和最新的CTP,针对现有的遗留数据库运行.对PocoA运行LINQ查询一直工作,直到我将下面的属性添加到该对象,我试图添加一个关系.

public virtual PocoB pocoB { get; set; }
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,我开始收到以下错误:

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")]
Run Code Online (Sandbox Code Playgroud)

我真的不知道需要改变什么来使这项工作.

Dam*_*enG 47

如果您的DbContext类公开多个DbSet <T>属性,其中T出现多次,则会发生此错误.基本上它无法弄清楚T类型的实例属于哪个DbSet.

在代码中,错误可能如下所示:

public class MyContex : DbContext {
    public DbSet<PocoA> PocoA { get; set; }
    public DbSet<PocoA> PocoB { get; set; } ...
Run Code Online (Sandbox Code Playgroud)

最后一行应该是DbSet <PocoB>而不是DbSet <PocoA>

TL; DR - 您复制粘贴了一个属性,忘了更改 DbSet中的类型参数.

  • 由于复制+粘贴,刚刚成为受害者.这节省了我一些时间. (2认同)