【发布时间】:2020-08-11 19:33:56
【问题描述】:
所以我的问题基本上与嵌套模型或关联表有关(不确定正确的术语)。 特别是当 TableA 具有 TableB 对象的 ICollection 并且 TableB 具有 TableA 的 ICollection 时,我该如何保存整个 TableA 模型及其关联的 Table2 项目。
例如:
-
用户表有:字符串名称、字符串地址、ICollection
-
Orders 表包含:OrderID、Total、ShipDate、ICollection
所以我有一个用户实例 (UserA),其中设置了名称和地址以及一组订单(假设 Bob Dole,1234 Main st,[567,12.34 美元,10 月 1 日;999,27.89 美元,11 月 5 日; ])。 如何触发保存方法来保存订单和用户? 我的期望是“db.User.add(UserA); + db.SaveChanges();”。我希望这可以保存用户,并在看到 Orders 集合后也保存它们。
但是,以前的开发人员是这样做的:
User userB = db.User.Add(new User(userA.Name, userB.address)); //Why do we have to create a 2nd instance of a User object, that will hold the same information as userA?
foreach(Order order in userA.orders)
{
Order NewOrder = db.Orders.Add(order); //This now updates the Orders table with new info, which will be saved by 'db.SaveChanges()'
NewOrder.User.Add(userB); //How does this update the value in the Orders table with the userID? Isn't this updating the object about to go out of scope?
}
db.SaveChanges()
我们唯一能想到的就是他们这样做的方式 userB 得到了从 .Add 命令分配的“ID”。但是您不能简单地说“userA = db.Users.Add(userA)”以便使用数据库插入时提供的 ID 更新实例吗?
【问题讨论】:
-
UserOrder 有模型吗?您正在描述多对多关系。我没有仔细检查,但我认为保存整个事情所需要的只是创建一个新用户并向用户添加新订单,只要你有那个中间表和所有外键设置正确。
标签: c# entity-framework