как сравнить и вызвать несколько имен conntionstring в DBContext MVC - PullRequest
1 голос
/ 25 мая 2019

Как сравнить строку 'location' и вызвать множественное имя строки подключения в DBContext, если строка соответствует значению, а также передать значение строки из контроллера в DBContext. В основном я хочу подключить другую базу данных, чтобы получить результат.

1) Файл Web.config

<connectionStrings>
  <add name="mum_Conn" connectionString="my connection string" />
  <add name="chd_Conn" connectionString="my connection string" />
  <add name="hyd_Conn" connectionString="my connection string" />
  <add name="goa_Conn" connectionString="my connection string" />
  <add name="pun_Conn" connectionString="my connection string" />
</connectionStrings>

2) DBContext: -

public class MasterDal: DbContext
{

    static MasterDal()
     {
         Database.SetInitializer<MasterDal>(null);
     }


   public MasterDal() : base("mum_Conn") { }


    public DbSet<ProjectListModel> prjlstModel { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<ProjectListModel>().ToTable("tbl_projects");
    }


}

3) Контроллер: -

public class FMPDataController : Controller
{

    public ActionResult FMP_Report()
    {   
        MasterViewModel  obj = new MasterViewModel();
        MasterDal dal = new MasterDal();
        List<ProjectListModel> prjColl = new List<ProjectListModel>();
        try
        {
            string name = @Session["username"].ToString();
            if (System.Configuration.ConfigurationManager.AppSettings.Get("mis_rpt_access").Contains(name))
            {
                prjColl = (from x in dal.prjlstModel
                           orderby  x.codes select x).ToList<ProjectListModel>();
                obj.projectlist = prjColl;
            }
            else
            {
               prjColl = (from x in dal.prjlstModel
                          where x.is_active == 1 orderby x.codes
                           select x).ToList<ProjectListModel>();
                obj.projectlist = prjColl;
            }                
        }
        catch (Exception ex)
        {
            Response.Write("<script>alert('" + ex.Message + "');</script>");
        }

        return View(obj);
    }

}

4) Результат, который я хочу получить в DBContext (т.е. класс MasterDal: DbContext)

 if (location.equal("MUM"))
 { 
    // call Mumbai DBConnection string name
 }
 else if (location.equal("HYD"))
 {
    //call Hyderabad DBConnection string name
 }

1 Ответ

0 голосов
/ 25 мая 2019

Вы можете перегрузить конструктор DbContext динамической строкой соединения

public class MasterDal : DbContext
    {
        public MasterDal(string nameOrConnectionString) : base(nameOrConnectionString)
        {

        }
       // DbSet &  OnModelCreating etc 
    }

и затем вызвать dal в Controller при необходимости

if (location.equal("MUM"))
 { 
    MasterDal dal = new MasterDal("mum_Conn");
   // do  mumbai related whatever 
 }
 else if (location.equal("HYD"))
 {
     MasterDal dal = new MasterDal("hyd_Conn");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...