设置手动实体框架连接字符串

时间:2014-07-14 15:45:46

标签: c# entity-framework-4 database-connection connection-string

我有一个由EF6创建的模型,默认情况下,我的连接字符串在app.config中初始化,如您所见:

<connectionStrings>
    <add name="ShirazRailwayEntities" connectionString="metadata=res://*/RailWay.csdl|res://*/RailWay.ssdl|res://*/RailWay.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=****;initial catalog=DB-Metro;user id=sa;password=****;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

我的应用中有3个图层ModelUIDomain class。我的连接字符串在“模型”和“UI”图层中初始化,我需要设置{{1用户,我的意思是连接字符串应由用户设置。

我的问题:

正如我所说,我有2层连接字符串在其中初始化,是否有必要按用户初始化两个连接?或者只是connection string就够了?应该初始化哪个连接字符串?

接下来的问题是如何按用户设置连接字符串?

我的UIEF model之间有一个名为repository

的存储库层
UI

我的Ui称这个存储库。

最好的问候

2 个答案:

答案 0 :(得分:3)

  

如何按用户设置连接字符串?

作为实体框架上下文类基础的DbContext类具有一个接受connectionString参数的构造函数。如果在上下文中公开它,则可以在运行时传递所需的任何连接字符串。

using(var ctx = new MyContext(GetCurrentUserConnectionString())
{
   ...
}

至于你的其他问题,我并不了解你的问题。如果您想要更好的答案,请澄清。

答案 1 :(得分:1)

您可以使用自定义连接字符串初始化dbcontext:

var context = new DbContext(connectionString);

<强>更新

在您的存储库中,您可以将参数添加到存储库的构造函数,该构造函数将初始化dbcontext的连接字符串。

示例:

public class StationRepository : GenericRepository<ShirazRailWay.ShirazRailwayEntities, DomainClass.Station>
{
    public StationRepository(string connectionstring):base(connectionstring){}
}

public class GenericRepository<T1, T2>
{
    protected GenericRepository(string connectionstring)
    {
        //initialize dbcontext using connection string
    }
}