Сценарий: попытка извлечь и переназначить информацию из одной базы данных в другую. В БД А есть данные, которые я хочу получить. Я хочу сохранить его в БД B в немного другой структуре.
DB A Я использую модель, созданную базой данных EDMX, поэтому она использует производную от ObjectContext. БД Б Я хотел бы, чтобы меня создал код. Поэтому я использую первый подход с кодом / моделью, устанавливая EntityFramework 4.1 через диспетчер пакетов. Итак, DB B использует производную DbContext
Когда я пытаюсь сохранить информацию из БД A в БД B, он говорит:
Метод тестирования RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts вызвал исключение: System.ArgumentException: не удалось найти тип концептуальной модели для «Некоторый объект в модели EDMX БД А»
Фактически это происходит при добавлении объекта DB B к свойству DbSet Derived 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();
}
}
Это происходит в месте кода, отмеченном стрелкой вверху («‹ - »)
FirstPVC является свойством DB B, но в точке стрелки он жалуется на отсутствие концептуальной модели для объекта, принадлежащего контексту DB B.
Это странно, поскольку я пытаюсь сохранить объект DB B в контексте DB B. Почему он должен заботиться о сущностях БД A.
Все контексты содержатся в одном проекте. Но Derived DbContext DB B имеет информацию только о своих собственных свойствах DbSet ‹>, и внезапно при попытке добавить что-то в свойство DbSet‹> он выдает ошибку, выделенную жирным шрифтом выше.
Кто-нибудь знает, почему это происходит? Почему DbContext должен заботиться о сущностях другого контекста, в частности, об одном из производных классов ObjectContext.
Возможно, полезно отметить, что объект, на который он жалуется, выглядит примерно так
[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AccessProvider : EntityObject
{
/*****...... ******/
}