1

大量のデータを含むページのリクエスト時間を短縮するために、LINQを使用する代わりに、Context.Database.SqlQueryメソッドを使用しようとしています。

Context.Database.SqlQuery<Inschrijving>("select * from dbo.inschrijving join dbo.duif on dbo.duif.duifid = dbo.inschrijving.duifid  where vluchtid = {0} and duivenmelker_duivenmelkerid = {1}",vluchtId, duivenmelker.DuivenmelkerId);

これは機能しますが、私のクラスでは仮想メンバーを使用しています。これらは、sqlqueryメソッドではnullです。

他の種類の結合を試しましたが、現時点では、IDを使用して仮想オブジェクトを復元するメソッドを使用しています。

仮想オブジェクトを持つクラスのスニペット:

[Key,ForeignKey("Duif"), Column(Order = 0)]
public int DuifId { get; set; }
public virtual Duif Duif { get; set; }

オブジェクト内の仮想メンバーを(より良い方法で)復元するにはどうすればよいですか?

sqlqueryでこれを一度に行う方法はありますか?

4

1 に答える 1

0

オブジェクト内の仮想メンバーを(より良い方法で)復元するにはどうすればよいですか?

あなたはしません。SqlQueryトップレベルのクラスのみをロードできますが、リレーションはロードできません。ロードするタイプごとに個別に実行する必要があり、SqlQuery代わりにこのバージョンを使用する必要があります。

Context.Set<Inschrijving>().SqlQuery(....);

これにより、エンティティが追跡されます。EFは、個別のクエリによって読み込まれたときにリレーションシップを修正するか、読み込まれていないリレーションに対して遅延読み込みを提供します。

于 2012-10-21T09:55:33.920 に答える