2010-08-24 9 views
17

Ho due POCO "Solo codice" che utilizzano EF4 e l'ultimo CTP, in esecuzione su un database esistente legacy. L'esecuzione di una query LINQ contro PocoA ha funzionato fino a quando non ho aggiunto la proprietà sottostante a quell'oggetto, stavo cercando di aggiungere una relazione.Entity Framework 4 Errore solo "Set di oggetti multipli per tipo non supportati"

public virtual PocoB pocoB { get; set; } 

Una volta che ho fatto, ho cominciato ottenere il seguente errore:

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

Così ho prossima pensato che il mio problema era perché non avevo definito il rapporto, e questo database legacy usando un prefisso 'fk/pk' invece di un suffisso 'Id' sulle chiavi primaria e straniera. Così ho aggiunto la seguente annotazione dati al metodo virtuale sopra specificato, senza alcun cambiamento nel comportamento:

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

Sono davvero a corto di ciò che deve essere cambiato per fare questo lavoro.

+0

Potete fornire le classi 'PocoA' e' PocoB'. Inoltre, qualsiasi classe di mappatura correlata. – Charlino

+5

Trovato il problema. Era un errore di battitura. La mia classe DbSet per PocoB è stata dichiarata come 'DbSet '. –

+15

Dovresti postare la tua soluzione come risposta e accettarla ... Questa domanda verrà rimossa dall'elenco senza risposta :) – forsvarir

risposta

46

Questo errore si verifica se la classe DbContext espone più proprietà DbSet <T> dove T si verifica più di una volta. Fondamentalmente non è possibile capire a quale DbSet appartiene un'istanza di tipo T.

Nel codice, l'errore probabilmente si presentava così:

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

dove quella linea finale avrebbe dovuto essere DbSet <PocoB> invece di DbSet <PocoA>

TL; DR - si copia -pasta una proprietà e ha dimenticato di cambiare il parametro di tipo nel DbSet.

+1

Grazie per il follow up. Mi ha salvato un mal di testa :) –

+2

Appena caduto vittima della stessa cosa a causa di copia + incolla. Questo mi ha salvato un po 'di tempo. – joelmdev

+0

Stesso problema. Ho fatto la stessa cosa .. copia-incolla! –

Problemi correlati