我输入两个不同的数据库之间的数据(有不一样的情况下)。
所以我的两个不同方面。 我们的目标是在上下文中的一些数据导入到上下文B.
在上下文B的数据不能直接编辑,他们只是从上下文A.在上下文B进口的,我在副本已经从它已导入的ID。
现在我想要检索列表,它是不是在上下文B或具有较新版本的所有数据。
我在这两个表中的ModifiedAt”现场,让我知道,如果现场已被修改。
这里是我当前的代码:
//Here I get all my current data in the context B with their modification time
Dictionary<int,DateTime> currentItems = contextB.Dossiers.ToDictionary(d=>d.MatchingReferenceId, d=>d.ModifiedAt);
//And here the pain starts:
contextA.Dossiers.Where(da=> !currentItems.Keys.Contains(da.Id) || currentItems.FirstOrDefault(db=>db.Key == da.Id).Value <da.ModifiedAt)//And I'm looping on it with a foreach.
第一部分(这里我检查,如果上下文B具有的元素或没有)的作品,与第二部分中,我得到这个异常:
Unable to process the type 'System.Collections.Generic.KeyValuePair`2[]', because it has no known mapping to the value layer.
但我不能做更多的简单有ID和修改时间之间的这种联系(在开始时,我在从另一个上下文POCO类,我也试图与匿名类型,相同的结果)
我在想什么?
编辑1
我也试图与完全相同的结果:contextA.Dossiers.Where(DA => currentItems.Keys.Contains(da.Id)|| currentItems.Any(DB => db.Key == da.Id &&分贝!值
编辑2
我试过拉姆达,但在这里它不喜欢在同一两个时间方面发挥:
var myList = (from db in contextB.Dossiers
let dstId = newContext.Dossiers.Select(d=>d.MatchingReferenceId)
from da in contextA.Dossiers
where !db.Contains(dSource.ID)|| (db.MatchingReferenceId == da.Id && db.ModifiedAt< da.ModifiedAt)
select new {NewId =db.Id, OldId = da.Id});
- >
指定的LINQ表达式包含对与不同上下文关联的查询引用。