EF4 - проблема POCO - PullRequest
       15

EF4 - проблема POCO

1 голос
/ 27 мая 2009

Сначала я пытался сделать какую-то обширную модель, используя подход POCO с самообследованием. Однако я не заставляю его работать так, как я хочу. Давайте возьмем блог. Каждый блог имеет набор записей, и каждая запись имеет набор комментариев. К сожалению, следующая модель не работает для меня. альтернативный текст http://blog.zoolutions.se/issue.png

Реализация класса POCO выглядит следующим образом:

public class Blog
{
    public bool Id { get; private set; }
    public string Title { get; set; }
    public bool AllowComments { get; set; }
    public User User { get; set; }
    public IList<Entry> Entries { get; set; }
}

public abstract class Post
{
    public virtual int Id { get; set; }
    public virtual string Header { get; set; }
    public virtual string Text { get; set; }
    public virtual DateTime CreatedAt { get; set; }
    public virtual int UserId { get; set; }
}

public class Entry : Post
{
    public Blog Blog { get; set; }
    public IList<Comment> Comments { get; set; }        
}

public class Comment : Post
{
    public Entry Entry { get; set; }
}

Это дает мне очень странную ошибку:

System.Data.MetadataException: схема указанное недействительно. Ошибки: отображение типа CLR на тип EDM неоднозначно, потому что несколько типов CLR сопоставьте тип EDM 'Entry'. предварительно найден тип CLR 'Entry', недавно найден Тип CLR 'System.Collections.Generic.Dictionary 2+Entry'. The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Entry'. Previously found CLR type 'Entry', newly found CLR type 'System.Runtime.CompilerServices.ConditionalWeakTable 2 + запись'.

Есть какие-нибудь подсказки? Я не могу обернуть голову вокруг этого сообщения об ошибке ...

Ответы [ 2 ]

4 голосов
/ 28 мая 2009

В Beta1 отображение классов CLR на типы EDM несколько неумолимо.

Звучит так, как будто проблема здесь в том, что найдено несколько классов 'Entry', которые не соответствуют требуемой сущности 'Entry'. Мы должны просто игнорировать их, но в Beta1 мы этого не делаем, и вы получаете исключение.

Мы работали над этим для следующей бета-версии, так что вместо этого EF продолжает поиск подходящего класса, и в вашем случае найдет ваш класс Entry, и все будет в порядке.

До выхода Beta2 вам, вероятно, потребуется изменить имя вашего класса Entry на что-то более уникальное.

Надеюсь, это поможет

Alex

Менеджер программ в команде Entity Framework.

1 голос
/ 29 декабря 2011

Не удалось добавить это сообщение под ответом Alex James.

В EF4 все еще есть ошибка, нечто подобное уже исправлено Microsoft в EF 4 Beta 2.

Я столкнулся с ошибкой, когда классы с похожими именами local хранятся в сборке, содержащей сущности, но принадлежат разным файлам модели EF4 edmx (например: когда сущность Country существует в обоих GeographyConfigurationModel.edmx, и CustomerServiceModel.edmx). Два класса Country содержат разные наборы свойств в каждой модели, и каждая модель находится в отдельной папке проекта, свойство модели entity namespace указано (и незамедлительно игнорируется).

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