Ошибка логической сущности Entity Framework

Я хочу иметь объект 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, 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 ответ

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

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

licensed under cc by-sa 3.0 with attribution.