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