LinqToSQLを使用してジェネリックリポジトリを実装しようとしています。私の問題は、基礎となるテーブルのいくつかにIDint
といくつかのGuid
IDがあることにあります。それをどのように説明しますか?
public T GetById(int id)
{
return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
LinqToSQLを使用してジェネリックリポジトリを実装しようとしています。私の問題は、基礎となるテーブルのいくつかにIDint
といくつかのGuid
IDがあることにあります。それをどのように説明しますか?
public T GetById(int id)
{
return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
別の汎用パラメーターをリポジトリー・インターフェースに追加します。
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
}
}
さて、最初に-GetByIdを開始しても意味がありませんが、LINQについて聞いたことはありますか?ユーザーに決定させます。どちらかといえば入手してください。
第二に、あなたがそれを主張したとしても、ジェネリックはまだあります。
GetById(T id)
これまでのところ、ジェネリックに複数のタイプを含めることができますが、名前として「id」を想定しているため、インターフェイスが必要です。
実際、あなたにはもっと深刻な問題があります。
GetTable()。Single(x => x.ID.Equals(id));
この場合、コンパイラーで問題が発生する可能性があります。Tにidフィールドが必要な制限はありません。そのため、一般的なメソッドでは使用しません。
つまり、最初に述べたように、言語の重要な部分(linq)の力からユーザーを取り除くことで、基本的に、一般的な不良リポジトリのさらに別のアンチパターン実装を作成していることになります。