最初にコードを使用していますEF5そしてvirtual
(遅延読み込み)として定義されたコレクションを持つオブジェクトがあります。これにより、呼び出されたときにデータが返されます。しかし、私はそれが熱心にロードされることを望みます。プロパティシグネチャからvirtual
を削除しましたが、常にnull
データを返します。 EFはクエリを実行しません、誰か助けてもらえますか?
編集:私は.include()
について知っています。それを行うには非仮想プロパティメソッドを使用したいだけです。
オブジェクト
User
([Key]
IDは、personクラスの親であるResourceオブジェクトにあります):
namespace Entities
{
[Table("Users")]
public class User : Person
{
[Required]
public ICollection<Role> Roles { get; set; }
}
}
役割:
namespace Entities
{
public class Role
{
[Key]
public string Id { get; set; }
public virtual ICollection<User> Users { get; set; }
}
}
これはよくある混乱です。遅延読み込みの反対は次のとおりです。no load nless明示的に自分で読み込みを行います(たとえば、Include
を使用して積極的に読み込みます)。
したがって、何らかの方法で遅延読み込みをオフにした場合(virtual
修飾子を削除することもその1つです)、動作は熱心な読み込みにはなりません。 )しかし読み込みなし。
考えてみてください。EFが遅延読み込みのマークが付いていないものすべてを熱心に読み込むと仮定します。 1つの簡単なクエリを実行するだけで、データベースの半分をロードするリスクがあります。
方法はありません デフォルトでナビゲーションプロパティを積極的にロードする方法があります(上記を読んだ後でもそれが必要な場合)。
Includeメソッドを使用して、積極的な読み込みでエンティティ内のICollectionの読み込みを強制する必要があります。次のリンクが役立つ場合があります: http://msdn.Microsoft.com/en-us/data/jj574232.aspx