簡體   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