Tag: clone

如何克隆POCO实体并添加到上下文

我正在使用EF4,我已经使用我的数据库结构中的代理创建了POCO对象。 我有一个POCO(对象),它与其他实体有很多关系。 我使用DataContractSerializer和BinaryFormatter创建了对象的深层副本,并将其称为clonedObject。 用于克隆的函数是: public T CloneProxy(T source) { var dcs = new System.Runtime.Serialization .DataContractSerializer(typeof(T)); string filePath = “Initiative.txt”; using (FileStream file = new FileStream(filePath, FileMode.Create)) { (new BinaryFormatter()).Serialize(file, source); } context.CreateProxyTypes(new Type[] { typeof(Initiative) }); using (FileStream file = new FileStream(filePath, FileMode.Open)) { return (T)(new BinaryFormatter()).Deserialize(file); } } 现在我有了clonedObject,如何将其添加到上下文中? 如何将其添加到数据库? 我的目标(只是给你一个关于POCO倡议的想法): Initiative { InitI […]

克隆C#中的列表

可能重复: 如何在C#中克隆通用列表? 嘿,我一直在尝试克隆一个列表,到目前为止,我发现函数addRange但我很确定它不克隆列表中的对象,但做一个浅的副本列表我想知道如何克隆列表谢谢提前。

在EntityFramework中克隆具有多对多关系的对象

我想要的只是创建一个对象的精确副本。 我上课了 [Serializable] public class Project { public int Id { get; set; } public String Name { get; set; } //navigational fields.. public virtual List BusinessRequirements { get; set; } } 和另一个 [Serializable] public class BusinessRequirement { public int Id { get; set; } public String Name { get; set; } public String Description […]

高效克隆缓存的对象

我们有一个应用程序,它对数据对象进行比较,以确定对象的一个​​版本是否与另一个版本不同。 我们的应用程序也对这些对象进行了一些广泛的缓存,在进行这些比较时我们遇到了一些性能问题。 这是工作流程: 数据项1是内存中的当前项。 此项最初是从缓存中检索并进行深度克隆(所有子对象,如字典等)。 然后编辑数据项1,并修改其属性。 然后,我们将此对象与存储在缓存中的原始版本进行比较。 由于数据项1已克隆且其属性已更改,因此这些对象应该不同。 这里有几个问题。 主要问题是我们的深度克隆方法非常昂贵。 我们对浅色克隆进行了分析,速度慢了10倍。 那是废话。 这是我们深度克隆的方法: public object Clone() { using (var memStream = new MemoryStream()) { var binaryFormatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone)); binaryFormatter.Serialize(memStream, this); memStream.Seek(0, SeekOrigin.Begin); return binaryFormatter.Deserialize(memStream); } } 我们最初使用以下内容进行克隆: public object Clone() { return this.MemberwiseClone(); } 这样做效率更高,但是因为它做了浅层克隆,所有作为此对象属性的复杂对象(如字典等)都没有被克隆。 该对象仍将包含与缓存中的对象相同的引用,因此在比较时属性将相同。 那么,有没有人有一种有效的方法在C#对象上进行深度克隆,这将克隆整个对象图?

我如何在.NET中“分叉”一个流?

如前所述,当BinaryReader或BinaryWriter关闭时,其底层Stream也会关闭(aargh)。 考虑这种情况:例程R通过MemoryStream,比如M ; 我想给M写一些东西,然后将它传递给另一个例程进行更多处理(不一定是写)。 为方便起见,我想在一个BinaryWriter中包装M来完成我的写作。 写完之后,我已经完成了BinaryWriter而不是M void R(MemoryStream M) { using (B = new BinaryWriter(M)) { // write some stuff using B } S(M); // now pass M to another routine for further processing } 但是,我不能在不关闭M情况下处理BinaryStream。 问:有没有办法做以下任何一种情况? 从MemoryStream中提取底层byte [], 克隆一个流 它关闭后重新打开一个流

是否可以克隆IEnumerable 实例,保存迭代状态的副本?

我想创建一个IEnumerator的副本,以便我可以从集合中的特定位置重新启动枚举过程。 显然,对于实现IList集合,这样做没有任何好处,因为我们可以记住感兴趣的索引。 使用yield语句和Linq函数的组合是否有一种聪明的方法来完成此任务? 我找不到合适的Clone()方法来复制枚举器,并且希望避免使用Enumerable.Skip()将新的枚举器重新定位到所需的恢复点。 此外,我希望尽可能保持解决方案的通用性,而不必依赖任何具体集合中的状态。

如何使用AutoMapper深度克隆包含IList属性的对象

我正在尝试使用AutoMapper深度克隆以下类: public class MainData { public MainData() { Details = new List(); } public int Id { get; private set; } public DateTime LastUpdate { get; private set; } public IList Details { get; private set; } public int Prop1 { get; set; } public int Prop2 { get; set; } public void AddDetail(Detail detail) […]

为什么对象会通过引用自动传递?

在C#的pass-by-reference-pass-by-value-concept的上下文中,我有一个关于深度和浅拷贝的一般性问题: 在C#中,需要显式创建接受指针/引用的方法,以便能够将此类方法传递给该方法。 但是,至少作为参数传递给方法/构造函数的对象的行为与其他对象不同。 如果没有按照此处所述进行额外的克隆,它们似乎总是通过引用传递:http: //zetcode.com/lang/csharp/oopii/ 。 为什么对象会通过引用自动传递? 在这些情况下,强制克隆过程是否有任何特别的好处,而不是更像int,double,boolean等处理对象? 这是代码示例,说明我的意思: using System; public class Entry { public class MyColor { public int r = 0; public int g = 0; public int b = 0; public double a = 1; public MyColor (int r, int g, int b, double a) { this.r = r; this.g = […]

我需要实现具有inheritance的C#深层复制构造函数。 有哪些模式可供选择?

我希望在C#中实现我的类层次结构的深度复制 public Class ParentObj : ICloneable { protected int myA; public virtual Object Clone () { ParentObj newObj = new ParentObj(); newObj.myA = theObj.MyA; return newObj; } } public Class ChildObj : ParentObj { protected int myB; public override Object Clone ( ) { Parent newObj = this.base.Clone(); newObj.myB = theObj.MyB; return newObj; } } […]

如何在类中实现克隆和复制方法?

我有一个叫做Employee类,有3个属性叫做ID , Name , Dept 。 我需要实现Copy和Clone方法吗? 当我使用Copy或Clone方法时,我需要避免Casting? 我该怎么做? 示例:与具有DataTable.Copy()和DataTable.Clone() DataTable.Copy()相同。