首页 > 解决方案 > EF6 - 将实体分配给变量

问题描述

我正在使用 EF 中的 3 个数据库。这些数据库具有相同的表,只是数据不同。当我得到一个值时,我需要查询一个特定的数据库。例子:

显然,每个数据库都有不同的实体/dbContext:

我想知道是否有办法将实体分配给一个变量,然后将此变量传递给这样的方法:

    public IQueryable<table> GetRecordsByNumBolla(string numBolla, **ENTITY**)
    {
        var dbContext = new **ENTITY**();
        var record = dbContext.Set<table1>().Where(x => x.number == numBolla);
        return record;
    }

我知道这个问题有一些解决方法,但是,如果可能的话,它会优化代码,我会少写

标签: c#entity-framework

解决方案


您提到 3 个数据库具有相同的表(即模式)。这意味着这些数据库可以由相同Entity/DbContext但不同的实例表示。请注意,您需要 3 个相同的不同实例Entity/DbContext才能访问各自数据库中的数据。

您可以使用一种方法来获取相应的ConnectionStringDbContext动态创建。获得实例后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);

推荐阅读