Entity Framework-вставка сущности с несколькими моделями и базами данных

у меня есть мой домен, разделенный на несколько моделей Entity Framework. У меня есть некоторые общие сущности, которые охватывают несколько моделей (с именем Lookup), однако они заменяются ссылками "using", используя методы, описанные в Работа С Большими Моделями В Entity Framework. Однако мой случай немного более уникален тем, что я также разделяю эти модели на несколько баз данных (по одной на модель).

у меня проблема с вставкой одного из моих общих объектов в мою общую БД. Это ошибка с ошибкой:

член с удостоверением Гармонии.Члены.FK_ResidentialAddress_ResidenceTypelookup' не существует в метаданных коллекция.

этот внешний ключ, на который он ссылается, делает не существует в "общей БД". Но я также не работа с сущностью на другой стороне отношения (с именем ResidentialAddress); и у меня даже нет контекста, который бы содержит другую инициализированную сущность (с именем MembersDb). Однако обе модели скомпилированы в одну сборку.

нет никаких навигационных свойствС поиск в ResidentialAddress. Хотя есть свойство навигации в другом направлении (которое я не буду настаивать - только использовать в памяти).

мой MetadataWorkspace на EntityConnection контекста CommonDb был явно инициализирован только SSDL/CSDL / MSL для данных, необходимых для этого база данных. Я подтвердил, что нет ссылок на внешний ключ, упомянутый в этом наборе данных схемы.

var metaAssembly = typeof(CommonDb).Assembly;
var schemaResources = new string[]
{ 
    String.Format("res://{0}/Common.ssdl", metaAssembly.FullName), 
    String.Format("res://{0}/Common.csdl", metaAssembly.FullName), 
    String.Format("res://{0}/Common.mdl", metaAssembly.FullName), 
}
MetadataWorkspace metadata = new MetadataWorkspace(schemaResources, new []{ metaAssembly });
EntityConnection connection = new EntityConnection(metadata, myDatabaseConnection);

КЛЮЧ: он работает, когда я вхожу в сгенерированные классы и удаляю все EdmRelationshipAttribute атрибуты вместе с их парные EdmRelationshipNavigationPropertyAttribute из связанных моделей (MembersDb).

основные вопросы:

  1. так почему же Entity Framework пытается что-то сделать с отношениями это для сущности, которая не находится в области действия и не будет затронута вставкой записи!?

  2. Я рад, что сгенерированный код удаляет атрибуты, упомянутые выше, но я все еще хочу, чтобы свойства навигации остались. Как бы я изменил CSDL для достижения этого?

Примечание: сохранение "дочерних" моделей не является приоритетом, как и целостность их теперь кросс-DB внешних ключей. Эта база данных сохраняются с помощью SQL CE, но они были первоначально созданы из одной базы данных master SQL Server.

1 ответов


Если каждая часть вашей модели записана в отдельную базу данных, то, возможно, файлы edmx не должны знать друг о друге (об объектах или отношениях с объектами, которые им не принадлежат).

Как насчет попробовать один из следующих подходов:
(Чтобы в конечном итоге иметь одни и те же классы сущностей для каждой части, но не обращать внимания на связи между ними.)

  1. удалите "usings" из edmx + отмена автоматической генерации и создания классов себе.
  2. удалите "usings" из шаблона edmx + modify t4, чтобы прочитать более одного edmx при создании классов.
  3. скопировать файлов edmx в сторону, так что у вас есть два набора edmxs.
    3.a. Используйте set #1 для автоматической генерации объектов.
    3.b. Измените set #2, удалив "usings" и используйте для генерации классов репозитория (objectsets).

Дайте мне знать, если одна из этих работ.

хорошее удача, Дэнни.