Ну, во-первых, ваши EDMX не должны (на самом деле не могут) разговаривать друг с другом .
Обычно это контекст 1-1 между контекстом -> EDMX -> База данных.
Лучшим решением будет инкапсуляция вашей модели за репозиторием.
Один репозиторий на совокупный корень даст вам PersonRepository, CvRepository, CustomerRepository.
Каждая DLL может предоставить один репозиторий.
Затем вам понадобится «Сервисный уровень», который может работатьс репозиториями.Похоже на «Единицу работы».
Например, вы можете создать CvPersonService, который мог бы обрабатывать взаимодействия с хранилищем Person (Core) и CV:
using PersonRepository;
using CvRepository;
public class CvPersonService
{
public CvPerson GetHydratedCvPersonFromTwoRepositories()
{
var person = personRepository.Find(1); // get a person
var cv = cvRepository.Find(1); // get a cv
return new CvPerson { ThePerson = person, TheCv = cv };
}
}
Важно отметить, что , EF не делает никаких предположений о соединениях с базой данных и контексте.База данных, связанная с конкретным контекстом, может находиться на локальном компьютере, сервере разработки или в облаке.EF не знает (или не заботится) о том, ГДЕ база данных.SQLProvider в вашей конфигурации специфичен для этого.EF должен предполагать, что это может быть где угодно.
Следовательно, вы не можете «соединять» запросы из одного контекста в другой.Как это будет работать?Возможно, в «старой школе» вы могли бы использовать связанный сервер, но для ORM это невозможно.
Скажем так:
- Создать базу данных, размещенную наваш локальный компьютер (DB1)
- Создайте базу данных, размещенную в Интернете.(DB2)
- Напишите запрос для объединения результатов из двух таблиц, одна из DB1, другая из DB2.
Вы не можете этого сделать, не так ли?Ни один не может Entity Framework.:)
Даже если бы все три EDMX / Context использовали одну и ту же базу данных, это не имело бы значения.
Приведенное выше было бы лучшим решением - перестройте его так, чтобы вы могли изящно разоблачитьмодели через свободные репозитории.
HTH