实体框架5实体的深层复制/克隆

我正在使用Entity Framework 5(DBContext),并且试图找到最好的方法来深度复制实体(即复制实体和所有相关对象),然后将新实体保存在数据库中。我怎样才能做到这一点?我已经研究过使用扩展方法,例如,CloneHelper但不确定是否适用于DBContext



哔哔one
浏览 394回答 3
3回答

暮色呼如

克隆实体的一种廉价的简便方法是执行以下操作:var originalEntity = Context.MySet.AsNoTracking()                             .FirstOrDefault(e => e.Id == 1);Context.MySet.Add(originalEntity);Context.SaveChanges();这里的诀窍是AsNoTracking() -当您加载这样的实体时,您的上下文不知道它,并且当您调用SaveChanges时,它将像对待新实体一样对待它。如果MySet有引用MyProperty并且您也想要它的副本,则只需使用Include:var originalEntity = Context.MySet.Include("MyProperty")                            .AsNoTracking()                            .FirstOrDefault(e => e.Id == 1);

尚方宝剑之说

这是另一个选择。在某些情况下,我更喜欢它,因为它不需要您专门运行查询来获取要克隆的数据。您可以使用此方法创建已经从数据库获得的实体的克隆。//Get entity to be clonedvar source = Context.ExampleRows.FirstOrDefault();//Create and add clone object to context before setting its valuesvar clone = new ExampleRow();Context.ExampleRows.Add(clone);//Copy values from source to clonevar sourceValues = Context.Entry(source).CurrentValues;Context.Entry(clone).CurrentValues.SetValues(sourceValues);//Change values of the copied entityclone.ExampleProperty = "New Value";//Insert clone with changes into databaseContext.SaveChanges();此方法将当前值从源复制到已添加的新行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript