2

为了简化为单元测试创​​建假数据,我想要一个可以创建通用实体的函数(我将其用作许多其他类的基础对象)。该实体有一个索引,为了生成一个新索引,我想简单地找到当前最高的数字并加一个。

我将 Index 用于许多其他类,并希望使此功能尽可能通用。我的问题是我不知道如何在我的通用函数中指定要使用的 DbSet GetMaxID

这是我到目前为止得到的:

private Entity CreateGenericEntity()
{
    return new Entity()
    {
        Guid = Guid.NewGuid(),
        Index = GetMaxID<Entity>(x => x.Index) + 1,
    };
}

private int GetMaxID<TEntity>(Expression<Func<TEntity, int>> expression)
{
    return _repository.Set<TEntity>().Max(expression);
}

_repository有一堆不同的 IDbSets 属性,比如

public IDbSet<Customers> Customers{ get; set; }

public IDbSet<Orders> Orders{ get; set; }

等等

4

1 回答 1

2

我发现我错过了 TEntity 的声明,这是通过附加where TEntity : class到我的函数来修复的。int?为了处理查询返回空值的情况,我还必须将表达式更改为接受。完整的功能是这样的(如果有人感兴趣的话)

private int GetMaxID<TEntity>(Expression<Func<TEntity, int?>> expression) where TEntity : class
{
    return _repository.Set<TEntity>().Max(expression) ?? 0;
}
于 2012-08-10T20:14:19.633 回答