リポジトリレイヤーをさらに抽象化するために、http://msdn.microsoft.com/en-us/magazine/ee236639.aspxで説明されているコードファーストのアプローチに従うことを試みました。
アカウントエンティティとサブスクリプションエンティティの間には多対多の関係があります。ナビゲーションプロパティは、他のエンティティを指す各エンティティに存在します(Account.Subscriptionsなど)。
独自のモデルを作成する前は、エンティティで生成されたモデルを使用していましたが、以下は正常に機能しました( "db"はエンティティコンテキストです):
public IQueryable<Account> GetBySubscriptionId(int subId)
{
return from a in db.Accounts
where a.Subscriptions.Any(s => s.SubscriptionId == subId)
select a;
}
アカウントのモデルは次のようになります。
public class Account
{
public int AccountId { get; set; }
public string Name { get; set; }
// nav properties
public virtual List<Subscription> Subscriptions { get; set; }
}
そして、同じLINQクエリを実行しようとすると、次のエラーが発生します。
「指定されたタイプメンバー「サブスクリプション」は、LINQ to Entitiesではサポートされていません。初期化子、エンティティメンバー、およびエンティティナビゲーションプロパティのみがサポートされています。」
どんな提案でも大歓迎です。