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

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

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

Участник с удостоверением. 'Harmony.Members.FK_ResidentialAddress_ResidenceTypeLookup' не существует в метаданных коллекция.

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

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

My 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, чтобы добиться этого?

ПРИМЕЧАНИЕ: Постоянство «ребенка» модели не является приоритетом, как и целостность их теперь перекрестных внешних ключей. Эти базы данных сохраняются с помощью SQL CE, но изначально они были созданы из одной главной базы данных SQL Server.

7
задан Reddog 7 April 2011 в 21:14
поделиться