我有父对象,它有childs属性,它本身就是一个集合对象。即。 Parent.Childs我通过WCF公开这些EF对象。换句话说,父母可以拥有多个孩子,就像发票(父母)和LineItems(孩子)一样。
客户端如何引用Child对象并将其添加到Childs集合中,而无需通过该服务并获取整个子项列表,并为每个匹配的子对象手动设置Parent.Childs.Add(child)。 / p>
我想做一些像Parent.Childs = new Childs(){new Child {childId = 1},new Child {childId = 2}};然后当我将Parent发送到服务器时,服务器知道id = 1且id = 2的子节点已经存在并挂起它。我相信它已经消失了。
我正在阅读有关EntityKey属性但我的对象客户端根本没有这个属性。
感谢
答案 0 :(得分:6)
using(var context = new MyEntities())
{
var child1 = new Child{ childId = 1 };
context.Children.Attach(child1);
var parent = new Parent();
parent.Children.Add(child1);
context.SaveChanges();
}
答案 1 :(得分:0)
服务器在从数据库加载实体之前不知道实体是否存在。因此,当您在客户端上添加子项并将其发送到服务器时,您还必须包含有关新子项,更新的子项和已删除子项的信息。如果您不包含此类信息,则必须先从DB加载完整的实体图,然后将接收的图与手动加载的图和过程更改进行比较。
此类案例的自动解决方案可以是自我跟踪实体(STE),但您的示例仍然不起作用。 STE需要您加载对象,将它们发送到客户端,修改它们并将它们发回。 STE将跟踪所有变化。