c# - EF6 - 将实体分配给变量
问题描述
我正在使用 EF 中的 3 个数据库。这些数据库具有相同的表,只是数据不同。当我得到一个值时,我需要查询一个特定的数据库。例子:
- 如果我得到值 1,我必须对数据库 1 进行查询。
- .. 值 2,到数据库 2。
- .. 值 3,到数据库 3。
显然,每个数据库都有不同的实体/dbContext:
- 数据库1实体
- 数据库2实体
- 数据库3实体
我想知道是否有办法将实体分配给一个变量,然后将此变量传递给这样的方法:
public IQueryable<table> GetRecordsByNumBolla(string numBolla, **ENTITY**)
{
var dbContext = new **ENTITY**();
var record = dbContext.Set<table1>().Where(x => x.number == numBolla);
return record;
}
我知道这个问题有一些解决方法,但是,如果可能的话,它会优化代码,我会少写
解决方案
您提到 3 个数据库具有相同的表(即模式)。这意味着这些数据库可以由相同Entity/DbContext
但不同的实例表示。请注意,您需要 3 个相同的不同实例Entity/DbContext
才能访问各自数据库中的数据。
您可以使用一种方法来获取相应的ConnectionString
并DbContext
动态创建。获得实例后DbContext
,将其作为参数传递给函数GetRecordsByNumBolla
以获取数据。
代码片段可以是:
// The class that represents database schema based on which databases
// are created.
public partial class DatabaseEntity : DbContext
{
public DatabaseEntity(string dbConn)
: base(dbConn)
{
}
}
// This function creates instance of DbContext using connection string
// for that database represented by parameter dbNumber.
public DbContext GetDBContext(int dbNumber)
{
//Get connection string which may be different for different database
string dbConnection = GetConnectionString(dbNumber);
//Create appropriate instance
var dbContext= new DatabaseEntity(dbConnection);
return dbContext;
}
// Function to get data
public IQueryable<table> GetRecordsByNumBolla(string numBolla, DbContext dbContext)
{
var record = dbContext.Set<table1>().Where(x => x.number == numBolla);
return record;
}
private string GetConnectionString(int dbNumber)
{
string connString = "";
switch (dbNumber)
{
case 1:
connString = @"server=localhost;database=DB1;uid=uid1;password=pwd1";
break;
case 2:
connString = @"server=localhost;database=DB2;uid=uid2;password=pwd2";
break;
case 3:
connString = @"server=localhost;database=DB3;uid=uid3;password=pwd3";
break;
}
return connString;
}
//Code snippet to use these functions
var dbContext = GetDBContext(1); //For 1st database
var record = GetRecordsByNumBolla("XYZ",dbContext);
推荐阅读
- here-api - 印度是否可以使用海拔和卡车路线 API
- sql - 如何对两个演员表进行求和并分组
- kubernetes - 如何在价值中使用 helm 价值?
- python - 错误:ModuleNotFoundError:没有名为“请求”的模块
- swift - 设置最大长度 UITextField
- c - C UNIX 数据报套接字——如何将文件描述符放入 fd_set
- python - python 中“NoneType”和“NoneType”错误的实例之间不支持“<”
- react-native - 为什么使用 axios 在 AWS S3 上获取公共对象返回空数据?
- c# - 如何在异步方法中使用 ActivityIndicator
- java - 使用 Javafx 单击按钮时 Java 服务器停止