私はEF CFアプローチを使用しており、次のものを持っています:
次のデータ モデル:
public class Category {
[Key]
public int CategoryID { get; set; }
[Required]
public string CategoryName { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product {
[Key]
public int ProductID { get; set; }
[Required]
public string ProductName { get; set; }
public virtual Category Category { get; set; }
}
次の DataContect 定義:
public class EFCFContext : DbContext {
public EFCFContext() : base("EFCFConnection") { }
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
このコードの目的は次のとおりです。
ASP.NET MVC 4 アプリケーションがあります。Product エンティティを編集するためのフォームと、Category.CategoryID プロパティにバインドされた Category エンティティの「ルックアップ」セレクター/エディターがあります。
対応する HttpPost アクションにフォームを送信するとき、Product.Category.CategoryName はまだ空です。このスコープには、Category オブジェクトの直接のインスタンスがありません。
//Category cat = new Category();
//cat.CategoryName = "Fake Name";
//context.Categories.Add(cat);
//context.SaveChanges();
EFCFContext context = new EFCFContext();
Product prod = new Product();
prod.ProductName = "Fake Name";
prod.Category = new Category();
prod.Category.CategoryID = cat.CategoryID;
//prod.Category.CategoryName is null. ModelState Error is added.
context.SaveChanges();
その結果、いくつかのモデル検証エラーが発生します。CategoryID は既にわかっているため、Product の Category プロパティを明示的に割り当て/再読み込みする必要があります。
だから私の質問は:
追加の手順を実行せずに、キー/ID によってナビゲーション プロパティを強制的に読み込むにはどうすればよいですか (したがって、ModelState エラーを回避します)。
私は間違った方向に進んでいるかもしれません。どんなガイダンスも役に立ちます。