我有一个使用实体框架访问并对其运行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数据库。
任何指针表示赞赏。
答案 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"
}
}
指向具有相同架构的其他数据库实例是配置更改,而不是代码更改。