1

Entity Framework を使用して NOT EXISTS クエリを実行し、LinqPad で次のクエリを実行したいと考えています。

var context = new CSSDbEntities();

(from s in context.Appliances
where !context.AvailableResources.Any(es => es.ApplianceId == s.ApplianceId)
select s).Dump();

ただし、これを自分のアプリケーションに転送しようとすると (コンテキストを IUnitOfWork インターフェイスでラップして、Unity を使用してモック/インジェクトでき​​るようにしています/これがコードベースを継承した方法であり、「作成できません」で失敗します)実行時の一定の例外。

私が実行しようとしている実際のコードは...

var query = from x in unitOfWork.Appliances
            where !unitOfWork.AvailableResources.Any(es => es.ApplianceId == x.ApplianceId)
            select s;

unitOfWork のプロパティは次のように実装されています...

public IDbSet<Appliance> Appliances
{
    get { return _objectContext.Appliances; }
}

public IDbSet<AvailableResource> AvailableResources
{
    get { _objectContext.AvailableResources; }
}
4

1 に答える 1

0

答えは簡単で、この関連する質問によって正しい方向に向けられました。

EF-Code First: タイプ '' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされています

unitOfWork「サブクエリ」でオブジェクトを使用する代わりに、アプライアンス オブジェクトの関連付けを使用する必要がありました。

私の作業クエリは...

var query = from x in unitOfWork.Appliances
            where !x.AvailableResources.Any(es => es.ApplianceId == x.ApplianceId)
            select s;

where句に注意してください!x .AvailableResources.Any の代わりに ! unitOfWork .AvailableResources.Any

于 2013-03-12T12:02:27.267 に答える