使用Linq将数据插入两个不同的表中

时间:2013-09-06 04:33:01

标签: linq asp.net-mvc-4

我正在使用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值添加为虚拟..?

请帮助!!!

1 个答案:

答案 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();