簡體   English   中英

POCO-實體框架-僅保留標量屬性

[英]POCO - Entity Framework - Persisting only scalar properties

這可能有點奇怪,但是我只想將對象的標量屬性保留到數據庫中。 例如。 假設我有2個表/實體“ User”和“ UserOrder”。 “用戶”實體具有“名字”,“姓氏”,“ UserOrders”(“ UserOrder”的集合)。 現在,我得到一個“ User”對象,其中包含一些UserOrders。 需要保留“用戶”(即FirstName和LastName)的標量屬性。

如果我執行context.Users.AddObject(user),它也在數據庫中添加“ UserOrders”(我不想要)。 我是否唯一的選擇就是創建一個新的“用戶”對象並將所有標量復制到該對象中(或者),即使其中包含其他導航屬性,我們是否可以明確地告訴EF僅保留標量?

我問的原因是我必須分兩個不同的步驟分別保存“ User”和“ UserOrders”。

非常奇怪-我確定您有這樣做的理由。

您可以從模型中刪除導航屬性(例如,非標量) ,以便可以分別保存兩個對象。

第1步- 添加用戶:

var user = new User { };
user.UserOrders = new UserOrders { }; // compiler error! no property exists. good!
ctx.Users.AddObject(user); // only user scalar properties added

第2步- 添加UserOrder-仍然需要與用戶“關聯”:

var relatedUser = ctx.Users.First(); // grab the user related to this order
var userOrder = new UserOrder { UserId = relatedUser.UserId }; // explicitly set the FK
ctx.UserOrders.AddObject(userOrder); // UserOrder added with appropriate FK

應該工作-我以前沒有嘗試過,但是可以嘗試一下。

請記住,此方法的缺點是您在請求User時將無法急於/延遲加載UserOrders您將必須使用LINQ在FK上手動加入。

您能否解釋為什么需要分兩個步驟進行? 無論哪種方式,如果您的導航屬性數量有限,則只需將其存儲在另一個變量中並刪除:

var orders = user.Orders;
user.Orders = null;
context.Users.AddObject(user);

...

context.Orders.AddObject(orders); // You might have to do these one by one

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM