Entity Framework Ошибка логического объекта - PullRequest
3 голосов
/ 08 июня 2011

Я хочу, чтобы в моей модели была сущность Person. Нет соответствующей таблицы и нет дискриминатора. Я просто хочу, чтобы он использовался как общий базовый класс для некоторых других объектов (я хочу определить public partial class Person с общей функциональностью.

Так, например, я хочу иметь:

// this class has no corresponding table in the DB
public partial abstract class Person 
{
    public int Id {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}

    public string DisplayName { get { return string.Format("{0}, {1}", LastName, FirstName); } }
}

// this corresponds to dbo.Users
public partial class User : Person
{

}

// this corresponds to dbo.Contacts
public partial class Contact : Person 
{
}

Итак, я создал абстрактную сущность Person, установил его в качестве базового класса для сущностей User и Contact, затем добавил мои свойства и установил мои отображения для dbo.Users и dbo.Contacts для PK Id, FirstName и LastName свойства.

Я получаю ошибку:

 3032: Problem in mapping fragments starting at lines 2109
..... are being mapped to the same rows in table .... Mapping conditions can be used to distinguish the rows that these types are mapped to.

Как мне заставить это работать?

1 Ответ

1 голос
/ 08 июня 2011

Вы должны определить сущность Person в файле EDMX и наследовать User и Contact от Person в EDMX.Ни одно из свойств, определенных в Person, не может появиться в унаследованной сущности.Затем перейдите к отображению деталей и сопоставьте унаследованные сущности с соответствующими таблицами.

Имейте в виду, что первичный ключ теперь должен быть уникальным для всех людей, а не только для производных сущностей.

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