kyp*_*ypk 69 dbcontext entity-framework-5
我正在使用Entity Framework 5(DBContext),我正在尝试找到深度复制实体的最佳方法(即复制实体和所有相关对象),然后将新实体保存在数据库中.我怎样才能做到这一点?我已经研究过使用扩展方法,CloneHelper但我不确定它是否适用DBContext.
Leo*_*Leo 123
克隆实体的一种便宜的简单方法是执行以下操作:
var originalEntity = Context.MySet.AsNoTracking()
.FirstOrDefault(e => e.Id == 1);
Context.MySet.Add(originalEntity);
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这里的技巧是AsNoTracking() - 当您加载这样的实体时,您的上下文不知道它,当您调用SaveChanges时,它会将其视为一个新实体.
如果MySet有引用MyProperty并且您想要它的副本,只需使用Include:
var originalEntity = Context.MySet.Include("MyProperty")
.AsNoTracking()
.FirstOrDefault(e => e.Id == 1);
Run Code Online (Sandbox Code Playgroud)
Jas*_*ere 21
这是另一种选择.
在某些情况下我更喜欢它,因为它不需要您专门运行查询来获取要克隆的数据.您可以使用此方法创建已从数据库中获取的实体的克隆.
//Get entity to be cloned
var source = Context.ExampleRows.FirstOrDefault();
//Create and add clone object to context before setting its values
var clone = new ExampleRow();
Context.ExampleRows.Add(clone);
//Copy values from source to clone
var sourceValues = Context.Entry(source).CurrentValues;
Context.Entry(clone).CurrentValues.SetValues(sourceValues);
//Change values of the copied entity
clone.ExampleProperty = "New Value";
//Insert clone with changes into database
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
此方法将当前值从源复制到已添加的新行.
| 归档时间: |
|
| 查看次数: |
37052 次 |
| 最近记录: |