Лучше ли иметь тип BaseEntity или интерфейс, от которого все объекты происходят? - PullRequest
1 голос
/ 12 июля 2011

В настоящее время я создал тип базового объекта, из которого будут получены все мои объекты.

public abstract class BaseEntity
    {

        /// <summary>
        /// Key Field for all entities
        /// </summary>
        /// 
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }


        /// <summary>
        /// Date entity was created
        /// </summary>
        public DateTime DateCreated { get; set; }

        /// <summary>
        /// Last date Modified
        /// </summary>
        public DateTime DateModified { get; set; }

        /// <summary>
        /// keep track of Row Version used for concurrency
        /// </summary>
        [Timestamp]
        public Byte[] RowVersion { get; set; }

    }
}

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

Поскольку мой класс BaseEntity является абстрактным классом, для меня это лучший способ сохранить атрибуты [Key, DatabaseGenerated (DatabaseGeneratedOption.Identity)] и [TimeStamp], чтобы он применялся ко всем моим производным сущностям с использованием свободного API и отдельный файл сопоставления? Я не думаю, что смогу настроить модельер для добавления отображения BaseEntity, потому что это абстрактный класс. Должен ли я создать интерфейс со всеми моими базовыми функциями и повторить сопоставления для всех моих сущностей?

Я использую класс EntityTypeConfiguration и создаю отдельные классы сопоставления для всех моих сущностей.

1 Ответ

7 голосов
/ 12 июля 2011

Вы можете использовать базовый класс:

public abstract class BaseEntity
{
    public Guid Id { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }
    public Byte[] RowVersion { get; set; }
}

Теперь все зависит от того, хотите ли вы отобразить наследование или нет. Я думаю, вы не хотите, поэтому определите свою конфигурацию как:

public class BaseEntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
    where TEntity : BaseEntity
{
    public BaseEntityConfiguration()
    {
        HasKey(e => e.Id);
        // This is not very good - check http://stackoverflow.com/questions/6098972/guid-comb-strategy-in-ef4-1-codefirst/6100606#6100606
        Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(e => RowVersion).IsRowVersion();
    }
}    

Теперь для каждой сущности, полученной из BaseEntity, получим свою конфигурацию из BaseEntityConfiguration,

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