Сценарий. Попытка извлечь и перегруппировать информацию из одной базы данных в другую.
В БД А есть некоторые данные, которые я хочу получить. Я хочу сохранить его в БД B в несколько иной структуре.
DB A Я использую модель, сгенерированную базой данных EDMX, поэтому она использует производную ObjectContext. БД Б Я хотел бы, чтобы код был сгенерирован. Поэтому я использую код / модель в первую очередь, установив EntityFramework 4.1 через менеджер пакетов. Таким образом, DB B использует производную DbContext
Когда я пытаюсь сохранить информацию из БД А в БД, это говорит:
Метод тестирования RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts выбросил исключение: System.ArgumentException: Не удалось найти концептуальный тип модели для «Некоторые объекты в модели EDMX БД А»
Это действительно происходит при добавлении сущности DB B в свойство DbSet производного DbContext DB B. Так что код похож на
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
foreach (FirstPVC pvc in pvcs)
{
this._irmaImport.FirstPVCs.Add(pvc); <--
this._irmaImport.SaveChanges();
}
scope.Complete();
}
}
Это происходит в точке кода, отмеченной стрелкой выше ("<-") </p>
FirstPVC - это свойство DB B, но в точке стрелки он указывает на отсутствие концептуальной модели для сущности, принадлежащей контексту DB B.
Это странно, поскольку я пытаюсь сохранить сущность DB B в контексте DB B. Почему это должно заботиться о сущностях БД А.
Все контексты содержатся в одном проекте. Но Derived DbContext из DB B знает только о своих собственных свойствах DbSet <>, внезапно при попытке добавить что-либо к свойству DbSet <> появляется ошибка, выделенная жирным шрифтом выше.
Кто-нибудь знает, почему это происходит? Почему DbContext должен заботиться о сущностях другого контекста, в частности, одного из производных классов ObjectContext.
Похоже, полезно заметить, что сущность, на которую он жалуется, выглядит примерно так
[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AccessProvider : EntityObject
{
/*****...... ******/
}