POCO - 实体框架 - 仅保留标量属性

时间:2010-12-21 22:09:26

标签: c# entity-framework poco

这可能有点奇怪,但我想只将对象的标量属性保留到数据库中。例如。假设我有2个表/实体“User”和“UserOrder”。 “用户”实体具有“FirstName”,“LastName”,“UserOrders”(“UserOrder”的集合)。现在,我得到一个“User”对象,其中包含一些UserOrders。我需要坚持“用户”的标量属性ieFirstName&姓。

如果我执行context.Users.AddObject(user),它也会将“UserOrders”添加到db(我不想要)。创建一个新的“User”对象并将所有标量复制到那是我唯一的选择(或)我们是否可以明确告诉EF只保留标量,即使其中还有其他导航属性?

我问的原因是我必须分别在两个不同的步骤中保留“User”和“UserOrders”。

2 个答案:

答案 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