Использование того же linq при переключении базы данных EF - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть база данных SQLServer, к которой я обращаюсь через Entity Framework и запускаю запросы LINQ. Сделано в C #. Работает нормально.

Следующим шагом я хотел бы изменить строку подключения, чтобы она указывала на вторую базу данных с точно такой же структурой и выполняла запросы LINQ.

C # -> LINQ строго типизирован, не разрешается и не компилируется.

Я попытался создать объект dbContext при условии строки подключения, но объекты LINQ (имена таблиц) не разрешаются.

Я попытался использовать оператор switch для переключения между контекстами.

Я пробовал "DaContext.Database.ExecuteSqlCommand", но это не вариант, так как я должен переписать все LINQ для использования базового SQL.

Каков наилучший способ достичь этого?

DbContext DaContext;

// Here I changed the connectionstring dynamically
DaContext = new DbContext("HEADCOUNT_NEW_Entities");

// Here I tried a switch statement
switch (APPLICATION_ID)
{

case "HEADCOUNT_NEW":
    DaContext = new WebApplication7.Models.Db_Entities.HEADCOUNT_NEW_Entities();
    break;

case "POSTS_NEW":
    DaContext = new WebApplication7.Models.Db_Entities.POSTS_NEWEntities();
    break; 

// way more Databases to add here, same structure

}

DaContext.Database.ExecuteSqlCommand ("exactly not what i want to do..........");

// This does not resolve the TABS table in LINQ
var jsonData = DaContext.TABS
.Select(c => new { c.TAB_CONTENT, c.TABLE_NAME, c.SORT_SEQUENCE, c.LEVELS })
.Distinct()
.OrderBy(c => c.SORT_SEQUENCE)
.ToList();

// More LINQ to follow...

Ожидается, что пользователь войдет в систему, используйте другую базу данных EF с тем же LINQ.

Любые указатели оценены.

1 Ответ

1 голос
/ 12 апреля 2019

Вы создали два разных контекста БД:

  • WebApplication7.Models.Db_Entities.HEADCOUNT_NEW_Entities
  • WebApplication7.Models.Db_Entities.POSTS_NEWEntities

Код, который работает с одним, не будетработать с другой, потому что они разные, со своими собственными различными наборами сущностей.Кроме того, вы даже не используете эти контексты, но пытаетесь использовать базовый тип DbContext из каркаса, который имеет нет наборов сущностей:

DbContext DaContext;

Избавьтесь отодин из контекстов БД и все ее сущности.Вам не нужно дублировать код вообще.Просто используйте контекст, который соответствует вашей схеме БД.Например:

var daContext = new WebApplication7.Models.Db_Entities.HEADCOUNT_NEW_Entities();
// now you can query the entity sets on daContext

Как только вы это сделаете, вернитесь к исходному заданию:

Я хотел бы изменить строку подключения, чтобы она указывала на вторую базу данных с точнота же структура

Строка подключения находится в конфигурации, а не в коде.Не меняйте любой код .Просто обновите строку подключения в конфигурации приложения.Например, в файле .config:

<configuration>
  <connectionStrings>
    <add name="HEADCOUNT_NEW_Entities" connectionString="CONNECTION STRING GOES HERE" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Или в файле .json:

{
  "ConnectionStrings": {
    "HEADCOUNT_NEW_Entities": "CONNECTION STRING GOES HERE"
  }
}

Указание на другой экземпляр базы данных с той же схемой является изменением конфигурации, не изменение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...