Entity Framework 4 Code Only Error «Несколько наборов объектов для одного типа не поддерживаются» - PullRequest
17 голосов
/ 24 августа 2010

У меня есть два POCO "Только код", использующие EF4 и последнюю версию CTP, работающие с существующей устаревшей базой данных.Выполнение запроса LINQ для PocoA работало до тех пор, пока я не добавил свойство ниже к этому объекту, и я пытался добавить отношение.

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")]

Я действительно в растерянности из-за того, что нужно изменить, чтобы это работало.

1 Ответ

47 голосов
/ 09 февраля 2012

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

В коде ошибка, вероятно, выглядела так:

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

где последней строкой должен был быть DbSet вместо DbSet

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...