繁体   English   中英

实体框架-保存模型与相关表

[英]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 更新实例吗?

首先,我认为,你必须改变你的架构。

UserOrders之间会有一对多的关系。 一个用户可以有多个订单,但一个订单不能属于多个用户。 即只有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM