Entity Framework 4, Расширение контекста одного файла EDMX до контекста другого файла EDMX - PullRequest
1 голос
/ 14 октября 2010

Мой вопрос: можем ли мы расширить один контекст на другой в Entity Framework 4. Ниже приводится описание проблемы.

Я использую EF4 для разработки веб-приложения.Мое веб-приложение имеет 3 проекта.

  • Один проект предназначен для хранения информации о кандидате.
  • Другой проект предназначен для хранения информации о клиентах.
  • Окончательный проект называется CORE.этот CORE содержит файл edmx, который должен быть расширен CV и CRM.

В качестве примера таблица адресов электронной почты может совместно использоваться как клиентом (CRM), так и резюме.Чтобы поделиться одной таблицей с другой, мы должны иметь возможность расширить один контекст (контекст CV) с другим контекстом (контекст клиента).Может ли кто-нибудь, имеющий опыт использования Entity Framework, поделиться со мной своим опытом, чтобы выяснить, возможно ли это.

У нас есть 3 файла edmx в трех библиотеках классов:

  1. Библиотека классов Person (Core) с core.edmx-Basic, относящимися к человеку (имя, адрес электронной почты)
  2. Библиотека классов CV с CV.edmx, имеющая данные, относящиеся к CV (Опыт, навыки)
  3. Система управления взаимоотношениями с клиентами (CRM), в которой есть данные о клиентах (данные о продажах ...)

Затем мы хотим использовать файл edmx библиотеки базовых классов (Core.edmx) с cv.edmx (в основном таблицы cv должны иметь возможность использовать таблицы из основных таблиц).Точно так же мы хотим использовать core.edmx с CRM.edmx для 3-го проекта

1 Ответ

4 голосов
/ 14 октября 2010

Ну, во-первых, ваши 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 это невозможно.

Скажем так:

  1. Создать базу данных, размещенную наваш локальный компьютер (DB1)
  2. Создайте базу данных, размещенную в Интернете.(DB2)
  3. Напишите запрос для объединения результатов из двух таблиц, одна из DB1, другая из DB2.

Вы не можете этого сделать, не так ли?Ни один не может Entity Framework.:)

Даже если бы все три EDMX / Context использовали одну и ту же базу данных, это не имело бы значения.

Приведенное выше было бы лучшим решением - перестройте его так, чтобы вы могли изящно разоблачитьмодели через свободные репозитории.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...