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).
основные вопросы:
так почему же Entity Framework пытается что-то сделать с отношениями это для сущности, которая не находится в области действия и не будет затронута вставкой записи!?
Я рад, что сгенерированный код удаляет атрибуты, упомянутые выше, но я все еще хочу, чтобы свойства навигации остались. Как бы я изменил CSDL для достижения этого?
Примечание: сохранение "дочерних" моделей не является приоритетом, как и целостность их теперь кросс-DB внешних ключей. Эта база данных сохраняются с помощью SQL CE, но они были первоначально созданы из одной базы данных master SQL Server.
1 ответов
Если каждая часть вашей модели записана в отдельную базу данных, то, возможно, файлы edmx не должны знать друг о друге (об объектах или отношениях с объектами, которые им не принадлежат).
Как насчет попробовать один из следующих подходов:
(Чтобы в конечном итоге иметь одни и те же классы сущностей для каждой части, но не обращать внимания на связи между ними.)
- удалите "usings" из edmx + отмена автоматической генерации и создания классов себе.
- удалите "usings" из шаблона edmx + modify t4, чтобы прочитать более одного edmx при создании классов.
- скопировать файлов edmx в сторону, так что у вас есть два набора edmxs.
3.a. Используйте set #1 для автоматической генерации объектов.
3.b. Измените set #2, удалив "usings" и используйте для генерации классов репозитория (objectsets).
Дайте мне знать, если одна из этих работ.
хорошее удача, Дэнни.