none
Entity framework6 如何动态连接数据库 RRS feed

  • 问题

  • 我的程序中存在多个数据库,每个数据库的结构是一样的。

    程序要根据传入的参数判断使用哪个database,这样就无法使用EF默认采用的读取App.Config的方式。

    请问EF现在支持这种方式吗?如何处理?


    2014年6月28日 17:59

答案

  • Hello,

    >>请问EF现在支持这种方式吗?如何处理?

    如果数据库结构是一样的话,这个是可以办到的,因为通过T4模板生成的DbContext类是partial,我们可以扩展这个类的构造函数,构造一个接收string 类型的参数的构造函数。下面是一个sample:

    public partial class MFDBEntities : DbContext
    
        {
    
            public MFDBEntities(string connectionString)
    
                : base(connectionString)
    
            {
    
            }
    
        }
    

    将上面的代码写在独立的一个cs文件里,如果和生产的DbContext类写在一起,下次刷新模型的时候会被覆盖,又要重新写。

    然后可以像下面创建DbContext实例了:

    YourContext context= new YourContext ("metadata=res://*/S09.csdl|res://*/S09.ssdl|res://*/S09.msl;provider=System.Data.SqlClient;provider connection string=\"data source=(localdb)\\v11.0;initial catalog=" + DBName + ";integrated security=True;MultipleActiveResultSets=True;App=EntityFramework\"");

    因为是string字符串,你可以定制你想要的连接。

    Regards.

    2014年6月30日 2:30
    版主