Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework 4 Code Only Error "Multiple objects sets per type are not supported"

I have two "Code Only" POCO's using EF4 and the latest CTP, running against an existing, legacy database. Running a LINQ query against PocoA worked until I added the property below to that object, I was trying to add a relationship.

public virtual PocoB pocoB { get; set; }

Once I did that, I started getting the following error:

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

So I next thought my problem was because I had not defined the relationship, and this legacy database was using a 'fk/pk' prefix instead of an 'Id' suffix on the primary and foreign keys. So I added the following data annotation to the virtual method specified above, with no change in behavior:

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

I'm really at a loss for what needs to be changed to make this work.

like image 259
Donald Hughes Avatar asked Aug 24 '10 19:08

Donald Hughes


1 Answers

This error occurs if your DbContext class exposes multiple DbSet<T> properties where T occurs more than once. Basically it can't figure out which DbSet an instance of type T belongs to.

In code, the error probably looked like this:

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

where that final line should have been DbSet<PocoB> instead of DbSet<PocoA>

TL;DR - you copy-pasted a property and forgot to change the type parameter in the DbSet.

like image 71
DamienG Avatar answered Sep 20 '22 17:09

DamienG