0

我正在使用 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 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();

因此,会出现一些模型验证错误。我需要明确分配/重新加载产品的 Category 属性,因为我已经知道 CategoryID。

所以我的问题是:

如何在没有额外步骤的情况下强制导航属性按其键/ID 加载(从而避免 ModelState 错误)?

我可能走错了方向。任何指导都会有所帮助。

4

0 回答 0