编程语言
首页 > 编程语言> > c#-通用基类的通用存储库,并通过键查询查找

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