Динамически установить источник данных в EF
Я использую EF6, и у меня есть 2 разные версии баз данных (MsSQL).
1 версия имеет таблицу Person, а другая - нет. Я переопределяюOnModelCreating
и я использую modelBuilder.Ignore<Person>();
Это работает для вызова базы данных для других таблиц. Что я хотел бы сделать, так это то, что когда я вызываю сущность через EF, она возвращает новый экземпляр класса Person вместо попытки соединиться с БД и получить ее данные.
например:
using(MyEntity ent = new MyEntity("connectionString")
{
var myPerson = ent.Person.FirstOrDefault(); ==> Depending on version, return the DBData or new Person()
}
1 ответ
Я предполагаю, что вы можете добавить логический параметр в конструктор вашего контекста:
public MyEntity(string connectionString, bool includePerson)
{
_includePersion = includePerson;
}
Теперь контекст может иметь свойство Person
или предпочтительно форма множественного числа People
:
public IQueryable<Person> People
{
get => _includePerson
? Set<Person>()
: (new[] { new Person() }).AsQueryable();
}
Технически вы должны быть вне леса сейчас, потому что нет никаких навигационных свойств в / из Person
, Тем не менее, я боюсь, что эта конструкция может иметь больше последствий вниз по течению, чем можно ожидать на первый взгляд. Я приложил бы все усилия, чтобы избежать этого. Добавление пустого Person
таблица с базами данных без нее была бы намного лучше. Это может сделать даже само приложение, при условии, что вошедший в систему пользователь базы данных имеет необходимые разрешения DDL.