首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EntityCollection复制到EntityCollection是不可能的?

从EntityCollection复制到EntityCollection是不可能的?
EN

Stack Overflow用户
提问于 2010-04-19 02:35:03
回答 3查看 2.3K关注 0票数 2

你会怎么做(伪代码):product1.Orders.AddRange(product2.Orders);

但是,函数"AddRange“并不存在,那么如何将EntityCollection "Orders”中的所有项目从product2复制到product1呢?

应该很简单,但事实并非如此。

EN

回答 3

Stack Overflow用户

发布于 2010-04-19 05:18:00

这个问题比你想象的要深。

您的foreach尝试会失败,因为当您调用product1.Orders.Add时,该实体将从product2.Orders中删除,从而使现有的枚举器无效,从而导致您看到的异常。

那么为什么实体要从produc2中移除呢?嗯,看起来很简单:因为订单一次只能属于一个产品。Entity Framework通过执行这样的规则来保护数据的完整性。

如果我理解正确的话,您的目标是将订单从一个产品复制到另一个产品的,对吗?

如果是这样,那么您必须在foreach循环中显式地创建每个订单的副本,然后将该副本添加到product1

由于某些对我来说相当模糊的原因,没有自动创建实体副本的方法。因此,你必须一个接一个地手动复制订单的所有属性。通过将此逻辑合并到Order类本身中,您可以使代码看起来更整洁-创建一个名为Clone()的方法,该方法将复制所有属性。但是,请务必不要复制“所有者产品引用”属性,因为您的全部目的是为它提供另一个所有者产品,不是吗?

无论如何,如果有什么不清楚的地方,不要犹豫去问更多的问题。祝你好运。

  • Fyodor
票数 3
EN

Stack Overflow用户

发布于 2010-04-19 15:42:07

基于前两个答案,我提出了以下可行的解决方案:

代码语言:javascript
复制
public static void AddRange<T>(this EntityCollection<T> destinationEntityCollection,
                                       EntityCollection<T> sourceEntityCollection) where T : class  
    {
        var array = new T[sourceEntityCollection.Count()];

        sourceEntityCollection.CopyTo(array,0);


        foreach (var entity in array)
        {
            destinationEntityCollection.Add(entity);
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2010-04-19 03:19:33

是的,通常的集合相关函数不在那里。

但,

  1. 你检查CopyTo方法了吗?
  2. 你发现使用迭代器有什么问题吗?

,你知道吗,GetEnumerator,浏览集合并复制实体?

以上两种方法可以解决你的问题。但是,我相信在.NET 3.0+中会有紧凑的解决方案。

我的答案与.NET 2.0相关

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2663414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档