c#-通用基类的通用存储库,并通过键查询查找
作者:互联网
我想做的事情非常简单-我想创建一个通用存储库,其中generic是通用基础实体,而Entity上的generic设置密钥类型.迷惑?别这样,让我们看一下代码:
public interface IEntity<TKey>
{
TKey Id { get; set; }
DateTime Create { get; set; }
DateTime? Storno { get; set; }
}
public class Entity<TKey> : IEntity<TKey>
{
public TKey Id { get; set; }
public DateTime Create { get; set; }
public DateTime? Storno { get; set; }
}
public class Repository<TEntity, TKey> : IRepository<TEntity, TKey>
where TEntity : Entity<TKey>
{
protected DbContext context;
protected DbSet<TEntity> database;
public TEntity Find(TKey id)
{
//return database.SingleOrDefault(f => f.Id == id); // <-- Here is how it should look like
return database.SingleOrDefault(f => f.Id.Equals(id)); // <-- Here is problem EF cann't work with this construction
}
}
是否存在针对此问题的解决方案?我想避免对基本存储库使用硬编码的密钥类型.我想到的是将写方法“查找为虚拟(或抽象)”,然后为长键实体,字符串键实体创建特殊的存储库,但是…这不是解决方案,而只是解决方法…
解决方法:
您可以使用DbSet<T>.Find(params object[] keys)
通过键查找实体:
return database.Find(id);
标签:repository-pattern,generics,repository,c,entity-framework 来源: https://codeday.me/bug/20191121/2051372.html