[英]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.