Определение общего репозитория для сущностей в EF DatabaseFirst

Я перехожу из CodeFirst в DatabaseFirst, чтобы отобразить мои представления. В моем подходе CodeFirst у меня была базовая сущность, подобная этой:

public abstract class BaseEntity
{
    /// <summary>
    /// Gets or sets the entity identifier
    /// </summary>
    public virtual int Id { get; set; }
... // Some more methods here for equality checking
}

Я вывел все свои классы из этого базового класса, поскольку у каждого из них был бы идентификатор. Поэтому я использовал этот BaseClass для создания общего хранилища. Мой репозиторий выглядит так:

public partial class EfRepository<T> where T : BaseEntity
{
    public readonly DemirbasContext context;
    private DbSet<T> _entities;

    /// <summary>
    /// Ctor
    /// </summary>
    /// <param name="context">Object context</param>
    public EfRepository(DemirbasContext context)
    {
        this.context = context;
    }

    public T GetById(object id)
    {
        return this.Entities.Find(id);
    }

    public void Insert(T entity)
    {
        try
        {
            if (entity == null)
                throw new ArgumentNullException("entity");

            this.Entities.Add(entity);

            this.context.SaveChanges();
        }
        catch (Exception e)
        {
        ...
        }
    }
    // Other methods here Update, Delete etc

Таким образом, я смог создать репозитории, просто указав параметр общего типа, как это

EfRepository<Car> carRepo = new EfRepository<Car>();

В DatabaseFirst я не могу получить классы сущностей из базового класса. Есть ли способ сделать это или какие будут ваши предложения?

1 ответ

Решение

К сожалению, я пропустил генераторы кода.

Щелкните правой кнопкой мыши модель данных (файл.EDM) и выберите "Добавить элемент генерации кода". Выберите DbContext (для упрощенного API DbContext).

Это создает два файла с расширениями.tt: один для контекста и один для сущностей. Если вы развернете файл, вы увидите, что файл.tt содержит все ваши классы.

Вы можете изменить его, как вам нужно.

Другие вопросы по тегам