我有一个由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="data source=****;initial catalog=DB-Metro;user id=sa;password=****;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
我的应用中有3个图层Model
,UI
,Domain class
。我的连接字符串在“模型”和“UI”图层中初始化,我需要设置{{1用户,我的意思是连接字符串应由用户设置。
我的问题:
正如我所说,我有2层连接字符串在其中初始化,是否有必要按用户初始化两个连接?或者只是connection string
就够了?应该初始化哪个连接字符串?
接下来的问题是如何按用户设置连接字符串?
我的UI
和EF model
之间有一个名为repository
UI
我的Ui称这个存储库。
最好的问候
答案 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
}
}