2

この問題を具体的に抱えている他の人を見つけることができなかったので、ここに行きます。

次のように定義された親子または一対多の関係として、あるエンティティが別のエンティティを単純に参照する単純なモデルがあります。

public class Parent
{
    public int ID { get; private set; }
    public string Name { get; private set; }
}

public class Child
{
    public int ID { get; private set; }
    public string Name { get; private set; }
    public virtual Parent Parent { get; private set; }
}

関連するエンティティを除くすべての通常のプロパティでうまく機能する、それぞれの特定のマッピング ファイルを作成しています。それは常にヌルになります。プロパティに仮想/プライベートアクセサーがあるかどうかに関係なく、最初にコンテキストから個別に親のコピーをプルしない限り、ロードされません。私のマッピングは次のようになります。

HasRequired(t => t.Parent).WithMany().Map(t => t.MapKey("ParentID")).WillCascadeOnDelete();

これで間違っていることはありますか?私は一生これを理解することはできません。すべてのベースをカバーするために、次のようにエンティティをロードしています。

Context.Set<Child>().FirstOrDefault(x => x.ID == 1);

そして最後に、私が持っているいくつかの制約があります:

  1. モデルに外部キーをプロパティとして含めることができません。
  2. 親から子のコレクションを持つことはできません。
4

2 に答える 2

4

私はついにそれを理解しました。多くの試行錯誤の末、パラメーターなしのコンストラクターを内部としてマークすると、EF はその型の動的プロキシ クラスを作成できないため、すべての遅延読み込みが無効になることに気付きました。私は 2 つのコンストラクターを持っています。1 つは EF がオブジェクトをハイドレートするためのもので、もう 1 つは呼び出し元がエンティティを作成するために必要なパラメーターを備えたものです。署名を保護された内部に変更すると、機能し始めました。だから私はこれを変更しました:

internal Child() {}

protected internal Child() {}
于 2012-04-29T17:37:25.047 に答える
0

遅延読み込みを有効にしていない可能性があります。これを試してください。

Context.Set<Child>().FirstOrDefault(x => x.ID == 1).Include(c=>c.Parent);
于 2012-04-29T05:30:56.430 に答える