EF 5.0 でマスター データ管理を使用するアプリケーションを実行していますが、アイテムの読み込み、保存などは常に同じであるため、可能な限り一般的なものにしたいと考えています。
私のエンティティは次のようになります。
// IDBEntity.cs
public interface IDBEntity<T>
{
public int ID { get; }
...
}
// Product.cs (Generated)
public class Product
{
public int ProductID
{
get; set;
}
public string Name
{
get; set;
}
}
// ProductExtension.cs
public patial class Product : IDBEntity<Product>
{
public int ID
{
get
{
return ProductID
}
}
}
場合によっては ID のクエリを実行したいのですが、カスタム プロパティを使用して LINQ to Entity クエリを実行できないという問題があります。
public class MasterDataViewModel<T> : where T : IDBEntity, new()
{
public T CurrentItem { get; set; }
public void ReloadItem(int id)
{
using (var context = new DatabaseContext())
{
// This is the problem
CurrentItem = context.Set<T>.FirstOrDefault(x => x.ID == id)
}
}
}
おそらく実際のIDを指す式でこれを行うことは可能ですか? このようなもの:
public interface IDBEntity<T>
{
public Expression<Func<T, int>> { get; }
}
public patial class Product : IDBEntity<Product>
{
public Expression<Func<Product, int>> ID
{
get
{
return x => x.ProductID
}
}
}
この問題に対する他のより良い解決策はありますか?