Определение общего репозитория для сущностей в 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 содержит все ваши классы.
Вы можете изменить его, как вам нужно.