単一のビジネス ロジック クラスを使用して、さまざまなエンティティ フレームワーク クラスに対して同様の操作を実行したい状況があります。これらのクラスが部分クラス ファイルで実装するインターフェイスを定義しました。
ただし、これらのインターフェイス メソッドに対して LINQ to entities クエリを作成しようとすると、クエリがクラスのプロパティを直接使用するのではなく、インターフェイスを介して使用されるため、NotSupportedException が発生します。
データベース層への負担を軽減したいので、オブジェクトへの LINQ に頼らずにこれを達成する方法はありますか?
これは私の問題を示すコードです (ファクトリによって作成された汎用リポジトリ クラスを使用しています)。
public interface INamedEntity
{
int ID { get; set; }
string Name { get; set; }
}
// This is an Entity Framework class which has CustomerID and CustomerName properties.
public partial class Customer: INamedEntity
{
int INamedEntity.ID
{
get { return this.CustomerID; }
set { this.CustomerID = value; }
}
string INamedEntity.Name
{
get { return this.CustomerName; }
set { this.CustomerName = value; }
}
}
...
public string GetName<T>(int entityID) where T: EntityObject, INamedEntity
{
using(var repository = RepositoryFactory.CreateRepository<T>())
{
return repository
.Where(e => e.ID == entityID)
.Select(e.Name)
.Single();
}
}