我正在尝试使用基本的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的“承诺”?还是有另一种方法吗?
答案 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
可能拥有的任何其他常见属性)。