【发布时间】:2019-01-25 02:18:28
【问题描述】:
我期待在 DbContext 中提取大量实体的增量更改,并将实际的 DB 提交委托给后台进程,例如 Azure Web 作业。
尝试过,但无法序列化。
var deltaJson = "";
try
{
var modifiedEntries = _ctx.ChangeTracker
.Entries()
.Select(x => x.Entity)
.ToList();
deltaJson = JsonConvert.SerializeObject(modifiedEntries, Formatting.Indented);
}
我的下一个希望是使用内存数据库,如果可以的话 序列化 DbContext 的整个对象图。
可行吗?您的专家建议和这方面的任何指示都会非常有帮助。
编辑: 我自己的版本:
public class DeltaTracking
{
public static List<T> Build<T>(ICollection<T> db, ICollection<T> req) where T : IR
{
return Build(db, req, new DT<T>());
}
public static List<T> Build<T>(ICollection<T> db, ICollection<T> req, IEqualityComparer<T> comp) where T : IStateTracking
{
db = db ?? new List<T>();
req = req ?? new List<T>();
List<T> added = req.Except(db, comp).ToList();
foreach (T a in added)
{
a.State = TrackingState.Added.ToString();
}
List<T> removed = db.Except(req, comp).ToList();
foreach (T r in removed)
{
r.State = TrackingState.Deleted.ToString();
}
List<T> unchanged = db.Intersect(req, comp).ToList();
foreach (T u in unchanged)
{
u.State = TrackingState.Unchanged.ToString();
}
List<T> resp = added.Union(removed, comp).Union(unchanged, comp).ToList();
return resp;
}
}
【问题讨论】:
-
您遇到的具体问题是什么?为什么不能序列化?记忆?其他问题?
标签: c# json entity-framework entity-framework-core ef-core-2.0