这可能有点奇怪,但我想只将对象的标量属性保留到数据库中。例如。假设我有2个表/实体“User”和“UserOrder”。 “用户”实体具有“FirstName”,“LastName”,“UserOrders”(“UserOrder”的集合)。现在,我得到一个“User”对象,其中包含一些UserOrders。我需要坚持仅“用户”的标量属性ieFirstName&姓。
如果我执行context.Users.AddObject(user),它也会将“UserOrders”添加到db(我不想要)。创建一个新的“User”对象并将所有标量复制到那是我唯一的选择(或)我们是否可以明确告诉EF只保留标量,即使其中还有其他导航属性?
我问的原因是我必须分别在两个不同的步骤中保留“User”和“UserOrders”。
答案 0 :(得分:1)
非常离奇 - 我确定你有理由这样做。
您可以从模型中删除导航属性(例如非标量),这样您就可以单独保留这两个对象。
第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
那应该工作 - 我之前没有尝试过,但是试一试。
请记住,这种方法的缺点是,当您请求UserOrders
时,您将无法加载/延迟加载User
- 您必须使用LINQ手动加入FK。< / p>
答案 1 :(得分:0)
您能解释为什么需要在两个单独的步骤中执行此操作吗?无论哪种方式,如果您拥有有限数量的导航属性,您只需存储在另一个变量&amp;删除:
var orders = user.Orders;
user.Orders = null;
context.Users.AddObject(user);
...
context.Orders.AddObject(orders); // You might have to do these one by one