【发布时间】:2019-04-12 12:19:41
【问题描述】:
我有一个 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。
任何指针表示赞赏。
【问题讨论】:
-
如果数据库的结构完全相同,包括 EF 表,例如迁移,它就可以工作。你确定它们是一样的吗?或者连接字符串是正确的?尝试使用 SQL Server Management Studio 登录
-
如果唯一改变的是连接字符串,那么应该没有问题。实际的错误是什么?我也不清楚你在
switch结构中要做什么。您的 DbContext 应该是一个包含实体的强类型上下文,而不仅仅是框架中的基本DbContext类型。此代码意味着您有两个 不同的 上下文用于两个 不同的 模式。 -
数据库名称不是连接字符串
-
您似乎想在数据库中的不同表上运行相同的查询?数据库中的每个表都是 Entity 中的不同类。所以你需要创建一个接口 My_Query
,其中 T 是 Entity 中的表。
标签: c# .net entity-framework linq