0

我正在从 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 中,我无法从基类派生实体类。有没有办法做到这一点,或者你有什么建议?

4

1 回答 1

0

糟糕,我错过了代码生成器。

右键单击您的数据模型(.EDM 文件),然后单击添加代码生成项。选择 DbContext(用于简化的 DbContext API)。

This creates two files with .tt extensions: One for context and one for entities. If you expand the file, you will see .tt file holds all your classes there.

You can modify it as you need.

于 2012-07-31T08:16:33.490 回答