我想附加一个对象树到我通过WCF服务调用提供的实体框架上下文。有问题的对象具有子项目集合,并且每个子项目都具有属于另一个跟踪对象类型的属性。但是,这些最后的项目只有一小部分,所以大部分收集项目都会共享它们。像这样的事情(除了,很明显,与EntityObjects):实体框架附加()对象树与共享对象
public class Product
{
public int Id;
public string Name;
public decimal Cost;
}
public class Order
{
public int Id;
public List<Detail> details;
}
public class Detail
{
public int Id;
public Product Product;
public int Quantity;
}
每当我有了同样的产品不止一个详细的订单,实体框架,因为它试图连接的多个拷贝过程中附加抱怨相同的产品密钥。这些信息来自WCF ServiceOperation,因此它将作为Product的离散实例进行反序列化,即使在客户端它们是一组共享对象。
有什么办法可以告诉EF对象上下文重新使用被追踪的实体,当Attach发生时?请注意,我不直接附加产品,所以诸如检查TryGetObjectStateEntry这样的技巧将不起作用。
有什么建议吗?
编辑:
我遇到对自我跟踪实体下面的文章(我已经切换到使用),其中包括一对夫妇可以用来替代Slauma的回答客户端选项跑,这将保留服务器端的协调代码。 (自追踪实体无需使用附加(),但重复键的问题依然存在。)