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

where TEntity : class関数に追加することで修正された TEntity の宣言が欠落していることがわかりました。int?また、クエリが null 値を返すケースを処理するために、式を受け入れるように変更する必要がありました。完全な関数は次のようになります (興味がある場合)

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 に答える