2010-08-24 2 views
17

У меня есть только два кода POCO, использующих EF4 и последний CTP, работающий против существующей устаревшей базы данных. Выполнение запроса LINQ к PocoA работало до тех пор, пока я не добавил свойство ниже к этому объекту, я пытался добавить отношения.Entity Framework 4 Ошибка только для кода «Множественные наборы объектов для каждого типа не поддерживаются»

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

Можете ли вы предоставить свои классы «PocoA» и «PocoB». Кроме того, любые связанные классы сопоставления. – Charlino

+5

Обнаружена проблема. Это была опечатка. Мой класс DbSet для PocoB был объявлен как 'DbSet '. –

+15

Вы должны отправить свое решение в качестве ответа и принять его ... Это ответит на этот вопрос без ответа :) – forsvarir

ответ

46

Эта ошибка возникает, если ваш класс DbContext предоставляет несколько объектов DbSet <T>, где T встречается более одного раза. В принципе, он не может понять, к какому DbSet принадлежит экземпляр типа T.

В коде, ошибка, вероятно, выглядел следующим образом:

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

где эта последняя строка должна был DbSet <PocoB> вместо DbSet <PocoA>

TL; DR - копировать -pasted свойство и забыл изменить параметр типа в DbSet.

+1

Благодарим вас за продолжение. Сохранял мне головную боль :) –

+2

Только что стал жертвой того же самого из-за копирования + вставки. Это спасло меня некоторое время. – joelmdev

+0

Такая же проблема. Я сделал то же самое .. копировать-вставить! –