0

新しい切断された POCO があります (私の場合は aspnet mvc modelbinder から)。

public class OfflineEntry
{
    public virtual int Id { get; set; }
    public virtual Category Category { get; set; }
    public virtual int CategoryId { get; set; }
}

外部キー プロパティ ( CategoryId) は既存のデータベース値に設定されていますが、ナビゲーション参照 ( Category) は最初は null です。ナビゲーション参照をロードする正しい方法は何ですか? ステップ1は、新しいオブジェクトをコンテキストに追加することだと思います。それから の前にSaveChanges、遅延読み込みを使用できますかLoadProperty、それとも手動で設定する必要がありますか?

public ContentResult Save(OfflineEntry o)
{
    db.OfflineEntries.Add(o);
    var categoryName = o.Category.Name; //?
    db.SaveChanges();
    return Content("ok");
}

public class Category
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    //optional 2-way nav property
}
4

1 に答える 1

2

専門家である他の誰かがこれに飛びつくことを望んでいましたが、あなたが抱える問題の1つは、のインスタンスがOfflineEntryDbContextから作成されていないため、LazyLoadingが機能しないことです。

一般に、エンティティ モデルをビュー モデルとして使用しない方が良い方法です。これが理由の 1 つです。

したがって、私の提案は、NewOfflineEntryViewModel以下のようなものを作成することです。

public class NewOfflineEntryViewModel
{
    public int CategoryId { get; set; }
}

次に、DbContext から手動でカテゴリを取得します

public ContentResult Save(NewOfflineEntryViewModel model)
{
    var category = db.Categories.Find(model.CategoryId);

    var newEntry = db.OfflineEntries.Create();
    db.OfflineEntries.Add(newEntry);
    newEntry.Category = category;

    db.SaveChanges();

    var categoryName = category.Name; //for whatever you needed with this

    return Content("ok");
}
于 2013-04-09T20:56:12.230 に答える