Использование базового класса для объекта создает проблемы для EF4.1 POCO - PullRequest
1 голос
/ 20 июня 2011

В новом проекте я хотел бы использовать функцию «Сначала код» Entity Framework для настройки моего хранилища данных.

В моем проекте у меня может быть несколько типов людей (держатель билета, путешественник, агент по продажам и т. Д.), Но мне нужна только проверка на держателе билета. Поэтому я создал базовый класс типа «Person», который не имеет атрибутов проверки, и унаследованный класс типа «TicketHolder», который содержит проверку для имени и т. Д.).

Моя проблема в том, что EF генерирует исключения:

Одна или несколько ошибок проверки были обнаружены во время генерации модели: System.Data.Edm.EdmProperty: Name: каждое имя свойства в типе должно быть уникальным. Имя свойства 'Title' уже определено.

Похоже, EF не распознает, что свойства "TicketHolder" переопределяют свойства "Person".

Как мне обойти это?

Базовый класс:

public abstract class Person
{
    public int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
}

Производный класс для TicketHolder:

public class TicketHolder : Person
{
    [Required(ErrorMessage = "Title Required")]
    public override string Title { get; set; }

    [Required(ErrorMessage = "First Name Required")]
    public override string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name Required")]
    public override string LastName { get; set; }

}

1 Ответ

0 голосов
/ 20 июня 2011

Попробуйте abstract вместо virtual:

    public abstract class Person {
        public int Id { get; set; }
        public abstract string Title { get; set; }
        public abstract string FirstName { get; set; }
        public abstract string LastName { get; set; }
        public DateTime DateOfBirth { get; set; } 
    }

Вы также можете использовать MetadataTypeAttribute для отделения метаданных от сущности.

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