0

単純な 1 対多の関係を持つ 2 つのエンティティを作成しました。

public class TestEntity
{
    public int Id { get; set; }
    public string Message { get; set; }

    public virtual ICollection<RelatedTest> RelatedTests { get; set; }
}

public class RelatedTest
{
    public int Id { get; set; }
    public bool Something { get; set; }

    public virtual TestEntity TestEntity { get; set; }
}

これをテストすると、ICollectionナビゲーション プロパティがインスタンス化されません。関連エンティティを追加できません。

var dataContext = new DataContext();
var testEntity = new TestEntity { Message = "Test message" };
var related = new RelatedTest { Something = true };
testEntity.RelatedTests.Add(related); //fails on this line because RelatedTests is null.
dataContext.TestEntities.Add(testEntity);
dataContext.SaveChanges();

それは期待される機能ですか?ナビゲーション プロパティをインスタンス化する必要がありますか? Entity Framework がコレクションをインスタンス化することを期待していました。

4

2 に答える 2

1

まあ、エンティティフレームワークはあなたのオブジェクトを「初期化」しません(データがすでにデータベースにある場合を除く)。あなたはそれを自分でしなければなりません。EFは「データベースにマップする」だけです。

于 2012-09-30T05:13:13.437 に答える
1

上記の例では、おそらくもっと似たものが必要です

var dataContext = new DataContext();
var testEntity = new TestEntity { Message = "Test message" };
var related = new RelatedTest { Something = true };
testEntity.RelatedTests = new List<RelatedTest>{related};
dataContext.TestEntities.Add(testEntity);
dataContext.SaveChanges();

基本エンティティを作成しているため、EF はまだエンティティを手に入れて修正を行っていません。

データベースからこのエンティティをリロードすると、遅延読み込みを使用しているように見えるため、上記の例ではコレクションを null にすることはできません。

于 2012-09-30T06:01:31.273 に答える