我有两个具有多对一关系的对象:
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),我感觉有点尴尬,因为这就像为一个对象获取并保存多次一样,我怀疑自己是否做对了方式...
在两种方法上我可能都错了,那么应对上述情况的正确方法是什么?