1

我正在使用 ASP .net 框架 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 Value 作为虚拟 .. ?

请帮忙 !!!

4

1 回答 1

0

问题是属性 ,ProductVariants没有正确初始化。通常,您必须为其提供初始值(例如在Product构造函数中)。

但是,您似乎正在使用实体框架和代码优先开发。如果确实如此,请不要将您的财产声明为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; } 
}

这允许实体框架使用适当的实现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();
于 2013-09-06T04:47:06.080 回答