我正在使用ASP .net framsework 4.5 MVC4
我有两个不同的表格如下
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime CreateTime { get; set; }
public DateTime LastUpdateTime { get; set; }
public virtual List<ProductVariants> ProductVariants { get; set; }
}
public class ProductVariants
{
public int ProductVariantsID { get; set; }
public int ProductID { get; set; }
public string FrontImage { get; set; }
public string BackImage { get; set; }
public string Color { get; set; }
}
我正在使用以下代码一次将数据提交到这些表中。
Product product = new Product
{
Name = model.Product.Name,
Description = model.Product.Description,
CreateTime = DateTime.Now,
LastUpdateTime = DateTime.Now,
};
ProductVariants pv = new ProductVariants
{
FrontImage = model.FrontImage.FileName,
BackImage = model.BackImage.FileName,
Color = model.ProductVariants.Color,
};
product.ProductVariants.Add(pv);
dbcontext.Products.Add(product);
dbcontext.SaveChanges();
我做错了什么?我是否也必须提交ProductVariants:
dbcontext.ProductsVariants.Add(pv);
如果是,那么我将如何将Product中的ProductVariants值添加为虚拟..?
请帮助!!!
答案 0 :(得分:0)
问题是属性ProductVariants
未正确初始化。通常,您必须为其提供初始值(例如,在Product
构造函数中)。
但是,看起来您正在使用Entity Framework和Code First开发。如果情况确实如此,则不要将您的财产声明为List<T>
,而是使用ICollection<T>
:
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime CreateTime { get; set; }
public DateTime LastUpdateTime { get; set; }
public virtual ICollection<ProductVariants> ProductVariants { get; set; }
}
这允许Entity Framework自动使用ICollection<T>
的适当实现(而不是基本的List<T>
)连接属性。
此外,您可能需要使用Create
方法创建实体,而不是直接构建新实例:
Product product = dbcontext.Products.Create();
product.Name = model.Product.Name;
...
ProductVariants pv = dbcontext.ProductVariants.Create();
pv.FrontImage = model.FrontImage.FileName;
...
product.ProductVariants.Add(pv);
dbcontext.Products.Add(product);
dbcontext.SaveChanges();