EntityFramework :Получить данные с условием в двух разных контекстах

Я импортирую данные между двумя разными базами данных (, которые имеют разный контекст ).

Итак, у меня два разных контекста. Цель состоит в том, чтобы импортировать некоторые данные из контекста A в контекст B.

Данные в контексте B никогда не редактируются напрямую, они только импортируются из контекста A. В контексте B я копирую идентификатор, из которого он был импортирован.

Теперь я пытаюсь получить список всех данных, которые не находятся в контексте B или имеют более позднюю версию.

У меня есть поле ModifiedAt" в таблице two, позволяющее узнать, было ли поле изменено.

Вот мой текущий код:

//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.

Но я не могу сделать проще, чтобы иметь эту связь между идентификатором и временем модификации (в начале, у меня был класс POCO из другого контекста, я также пробовал с анонимным типом, тот же результат)

Что мне не хватает?

Редактировать 1

Я также пробовал это с точно таким же результатом :contextA.Dossiers.Where (da=> !currentItems.Keys.Contains (da.Id )|| currentItems.Any (db=>db.Key == da.Id && db.Value

Редактировать 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});

-->

The specified LINQ expression contains references to queries that are associated with different contexts.

7
задан J4N 16 August 2012 в 12:41
поделиться