来自Generic DataRepository的GetEntity无法正常工作

时间:2014-05-20 14:42:40

标签: c# asp.net .net generics repository

我正在尝试使用基本的CRUD操作创建一个通用存储库。我的GetEntity功能出现问题

protected override T GetEntity(FinancialDataContext entityContext, int id)
{
    var query = (from e in entityContext.Set<T>()
                 where e.Id == id
                 select e);
    var result = query.FirstOrDefault();
    return result;
}

错误发生在我的电子邮件中。“Id”并说“T不包含'Id'的定义,并且没有扩展方法'Id'接受第一个类型'T'的参数可以找到(丢失)引用?)

如何引用ID的“承诺”?还是有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

如果您对实体的声明方式有一定程度的控制权,那么您可以执行以下操作。创建一个声明Id属性的基类:

public abstract class BaseEntity
{
    public in Id { get; set; }
}

然后让所有实体继承此类(确保从它们中删除Id声明,因为它已经在基类中):

public class Entity1 : BaseEntity

现在,在您的通用存储库中,您实际上可以对如何键入它进行一些限制:

public class Repository<T> where T : BaseEntity

这本身就很好,但它也可以让您访问Id(以及此BaseEntity可能拥有的任何其他常见属性)。