插入具有数据库中已经存在的相关实体集合的实体

时间:2018-07-01 05:12:15

标签: c# entity-framework-core

我有两个具有多对一关系的对象:

public class Product
{
   public int ProductID { get; set; }
   public string ProductName { get; set; }
   public virtual Collection<ProductInventory> ProductInventorys { get; set; } = new Collection<ProductInventory>();
}

public class ProductInventory
{
   public int ProductInventoryID { get; set; }
   public string ProductInventoryName { get; set; }
   public int ProductID { get; set; }
   public virtual Product ProductFK { get; set; }
}

我想向数据库中添加一个新的Product和一个现有ProductInventory的集合(我的API的输入为ProductInventoryID数组),所以我执行以下操作: / p>

private void AddProduct(int[] productInventoryIDs)
{
    Product newProduct = new Product();
    newProduct.Name = "New Product";

    // Here I have no clue which would be the correct way...should I use 

    // Approach A - fetch each related "ProductInventory" entity from database,
    // then add them into the collection of my new base entity - Product)
    productInventoryIDs.ToList().Foreach(p => 
        {
            newProduct.ProductInventorys.Add(_dbContext.ProductInventory.FindById(p))
        }
    );

    _dbContext.Products.Add(newProduct);
    _dbContext.SaveChanges();

    // Approach B: Save base "Product" entity first, then grab the new ProductID, 
    // then fetch each "ProductInventory" from database and assign the foreign key with the new "ProductID" value, and then save each
    _dbContext.Products.Add(newProduct);
    var newProductID = _dbContext.SaveChanges();

    productInventoryIDs.ToList().Foreach(pi => 
        {
            var existedProductInventoryFromDb = _dbContext.ProductInventory.FindById(pi);
            existedProductInventoryFromDb.ProductID = newProductID;
            _dbContext.SaveChanges();
        }
    );
}
  • 通过使用方法(A),我的newProduct无法保存,我查看了SQL资源,看起来它也在尝试插入ProductInventory ,尽管这些ProductInventory已存在于数据库中。我想那是因为我将它们添加到了基本实体的集合中?

  • 通过使用方法(B),我感觉有点尴尬,因为这就像为一个对象获取并保存多次一样,我怀疑自己是否做对了方式...

在两种方法上我可能都错了,那么应对上述情况的正确方法是什么?

0 个答案:

没有答案