ali*_*lik 12 .net c# entity-framework entity-framework-6
如何将实体从一个上下文(继承DbContext)复制到另一个上下文?
我发现的所有东西只适用于ObjectContext但不适用于DbContext或使用DbContext但不起作用.
例如,我发现/尝试过:
我将它用于两个目的:
怎么做?
EF 6.1.1,.NET 4.5.2,C#
以下是尝试模拟第二个操作的测试代码(上游更改回远程数据库):
var addedFirst = localContext.Firsts.AsNoTracking().Single(m => m.Id == 4);
var updatedFirst = localContext.Firsts.AsNoTracking().Single(m => m.Id == 2);
addedFirst.Items.First().Id = 0;
addedFirst.Items.First().FirstId = 0;
addedFirst.Id = 0;
remoteContext.FirstItems.Add(addedFirst.Items.First());
remoteContext.Firsts.Add(addedFirst);
var originalFirst = remoteContext.Firsts.Single(m => m.Id == 2);
var originalItem = originalFirst.Items.First();
originalItem.Title = updatedFirst.Items.First().Title;
Run Code Online (Sandbox Code Playgroud)
这是模型:
public class ModelFirstBase
{
public virtual int Id { get; set; }
public virtual ICollection<ModelFirstSub> Items { get; set; }
public virtual string Title { get; set; }
}
public class ModelFirstSub
{
public virtual int Id { get; set; }
public virtual int FirstId { get; set; }
public virtual ModelFirstBase First { get; set; }
public virtual string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
PS:随着模型与生产应用程序共享,属性需要保持虚拟,这将受益于动态代理.
您是否尝试简单地将模型转换为第二个模型:
public class ModelFirstBase
{
public virtual int Id { get; set; }
public virtual ICollection<ModelFirstSub> Items { get; set; }
public virtual string Title { get; set; }
}
public class ModelFirstSub
{
public virtual int Id { get; set; }
public virtual int FirstId { get; set; }
public virtual ModelFirstBase First { get; set; }
public virtual string Title { get; set; }
}
public class ModelTranslator
{
public ModelFirstSub TranslateModelFirstBase(ModelFirstBase entity)
{
//do some error handling and null checks.
var second = new ModelFirstSub(){
FirstId = entity.Id,
.....
};
return second;
}
}
public void TransferModels(){ //I haven't thought about disposing stuff, you should.
var firstContext = new FirstContext();
var secondContext = new SecondContext();
foreach (var first in firstContext.ModelFirstBases){
var second = new ModelTranslator().TranslateModelFirstBase(first);
secondContext.ModelFirstSubs.Add(second);
}
secondContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
但请注意,EF 并不用于批量复制数据,尽管这应该可行,但这并不是一个实际的解决方案。如果使用 Sql 服务器或任何您可能使用的数据库的等效项,您应该考虑 SqlBulkCopy。
SQLBulkCopy:SqlBulkCopy 如何工作
| 归档时间: |
|
| 查看次数: |
9952 次 |
| 最近记录: |