Если вы хотите взять две разные базы данных и обращаться с ними так, как если бы они были одной и той же базой данных, если это касается вашего приложения, то вам нужен слой абстракции между ними, который скрывает различия.
Iдумаю, у вас есть несколько вариантов здесь.Один из них - использовать две разные модели EF, а затем вы увидите шаблон хранилища, чтобы абстрагироваться от различий между ними.Второй вариант - сделать какое-то условное сопоставление.
Вы не очень разобрались в различиях между базами данных, поэтому сложно привести конкретные примеры для каждого варианта, но общая идея для первогозаключается в том, что вы пишете интерфейс, представляющий хранилище, например:
interface IAnimalRepository
{
IQueryable<Animal> SelectAll();
Animal Insert(Animal newRecord);
// etc.
}
Теперь вы пишете свой сервисный / бизнес-уровень для этого интерфейса, а не прямо для контекста.
Вы можете реализоватьскажем, интерфейс для «старого» отображения EF, например:
class AnimalRepository: IAnimalRepository
{
private OldEntities Context { get; set; }
public AnimalRepository(OldEntities context)
{
this.Context = context;
}
IQueryable<Animal> IAnimalRepositorySelectAll()
{
return from oa in Context.OldAnimals
select new Animal // Animal is a POCO
{
Id = oa.Id,
Name = oa.Name
};
}
// etc.
}
Второй вариант - выполнить условное отображение.В этом случае вы будете использовать новую функциональность Code First, которая в настоящее время находится в CTP для Entity Framework 4, которая позволяет указывать имена таблиц и строк во время выполнения.
Из этих двух вариантов я бы, вероятно, выбрал хранилищевариант шаблона, потому что я думаю, что вы все равно захотите использовать шаблон репозитория.Это делает модульное тестирование и другие проблемы намного проще.Но любой из них будет работать.