切换EF数据库时使用相同的linq

时间:2019-04-12 12:19:41

标签: c# .net entity-framework linq

我有一个使用实体框架访问并对其运行LINQ查询的SQLServer数据库。用C#完成。效果很好。

下一步,我想更改Connectionstring,因此它指向结构完全相同的第二个数据库并运行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...

期望用户登录,使用具有相同LINQ的其他EF数据库。

任何指针表示赞赏。

1 个答案:

答案 0 :(得分:1)

您已经创建了两个不同的数据库上下文:

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

在一个代码上运行的代码在另一个代码上无效,因为它们是不同的,它们具有不同的实体集。此外,您甚至没有使用这些上下文,而是尝试使用框架中的基本DbContext类型,该框架具有 no 个实体集:

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"
  }
}

指向具有相同架构的其他数据库实例是配置更改,而不是代码更改。