我正从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
}
我从这个基类派生了所有类,因为每个类都有一个Id。所以我使用这个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中,我无法从基类派生实体类。有没有办法做到这一点或你的建议是什么?
答案 0 :(得分:0)
哎呀,我错过了代码生成器。
右键单击数据模型(.EDM文件),然后单击“添加代码生成项”。选择DbContext(用于简化的DbContext API)。
这将创建两个扩展名为.tt的文件:一个用于上下文,一个用于实体。如果展开文件,您将看到.tt文件包含您的所有类。
您可以根据需要进行修改。