[英]Entity Framework-Saving models with related tables
所以我的问题基本上与嵌套模型或关联表有关(不确定正确的术语)。 特别是当 TableA 具有 TableB 对象的 ICollection 并且 TableB 具有 TableA 的 ICollection 时,我该如何保存整个 TableA model 及其关联的 Table2 项目。
例如:
用户表有:字符串名称、字符串地址、ICollection<Orders>
Orders 表包含:OrderID、Total、ShipDate、ICollection < User >
因此,我有一个用户实例 (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 更新实例吗?
首先,我认为,你必须改变你的架构。
User
和Orders
之间会有一对多的关系。 一个用户可以有多个订单,但一个订单不能属于多个用户。 即只有Order
表会有UserId
。
更新
此外,无需单独添加Orders
数据。 因为在User
表的实体中会有可用的集合类型。
您只需将值与Orders
字段一起分配给 User 表的实体,并且只插入一次。
代码将以某种方式如下:
var userData = user;
var orderData = orderCollection;
userData
将是单个记录,而orderData
可以是多个。
现在将该数据分配给User
数据 model:
var userAndOrder = new User
{
Name = user.Name,
Address = user.Address,
Orders = orderCollection.Select(o => new Order
{
//assign order fields here
}).ToList();
};
然后保存这些数据。 它将根据 UserId 将Orders
数据本身保存在 Order 表中。
db.Add(userAndOrder);
db.SaveChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.