3

LinqToSQLを使用してジェネリックリポジトリを実装しようとしています。私の問題は、基礎となるテーブルのいくつかにIDintといくつかのGuidIDがあることにあります。それをどのように説明しますか?

public T GetById(int id)
{
    return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
4

2 に答える 2

6

別の汎用パラメーターをリポジトリー・インターフェースに追加します。

public interface IRepo<TType, PKType>
{
    TType GetById(PKType id);
}

次に、それを実装します。

public class CustomerRepo : IRepo<Customer, Guid>
{
    public Customer GetById(Guid id)
    {
        // code to get from repo
    }
}
于 2013-01-16T21:01:51.283 に答える
-3

さて、最初に-GetByIdを開始しても意味がありませんが、LINQについて聞いたことはありますか?ユーザーに決定させます。どちらかといえば入手してください。

第二に、あなたがそれを主張したとしても、ジェネリックはまだあります。

GetById(T id)

これまでのところ、ジェネリックに複数のタイプを含めることができますが、名前として「id」を想定しているため、インターフェイスが必要です。

実際、あなたにはもっと深刻な問題があります。

GetTable()。Single(x => x.ID.Equals(id));

この場合、コンパイラーで問題が発生する可能性があります。Tにidフィールドが必要な制限はありません。そのため、一般的なメソッドでは使用しません。

つまり、最初に述べたように、言語の重要な部分(linq)の力からユーザーを取り除くことで、基本的に、一般的な不良リポジトリのさらに別のアンチパターン実装を作成していることになります。

于 2013-01-16T21:02:20.113 に答える