我正在使用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实体的“lookup”选择器/编辑器。
将表单提交给相应的HttpPost Action时,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();
因此,会发生一些模型验证错误。 我需要明确地分配/重新加载Product的Category属性,因为我已经知道CategoryID。
所以我的问题是:
如何在没有额外步骤的情况下强制导航属性通过其Key / ID加载(从而避免ModelState错误)?
我可能会走错方向。任何指导都会有所帮助。