将dbcontext连接字符串传递给DALayer [英] passed dbcontext connection string to DALayer
问题描述
我的应用程序中有4层 UI
, DomainClass
, Model(DBCntext)
, Repository
。
I have 4 layer in my application UI
,DomainClass
,Model(DBCntext)
,Repository
.
在存储库中,我有一个这样的抽象类: p>
In repository i have an abstract class like this :
public abstract class GenericRepository<C, T> :
IGenericRepository<T>
where T : class
where C : DbContext, new()
{
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _entities.Set<T>();
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = _entities.Set<T>().Where(predicate);
return query;
}
public virtual void Add(T entity)
{
_entities.Set<T>().Add(entity);
}
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = System.Data.Entity.EntityState.Modified;
}
public virtual void Save()
{
_entities.SaveChanges();
}
}
所有我的实体从这个类继承像这样:
All my entities inheritance from this class like this :
namespace Repository
{
public class StationRepository : GenericRepository<ShirazRailWay.ShirazRailwayEntities, DomainClass.Station>
{
}
}
我 UI
我调用这个存储库。你可以在这里看到:
I UI
i called this repositories. as you can see here :
stationrepository objnew=new stationrepository();
obnew.getall();
在UI层我有一个连接字符串在 app.config
,你可以在这里看到:
In UI layer i have an connection string in app.config
as you can see here :
<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>
但是,我想给我的用户一个选项,使用这个选项,他们可以设置他们的连接字符串
自己。所以我在UI层创建了一个表单,当用户尝试登录
时,会向他们询问连接字符串我的问题是如何将此连接字符串传递给我的dbcontext
?
But i want to give an option to my users that with this option they can set their connection string
by themselves.So i created a form in UI layer that when the users trying to log in
it asks them the connection string .My problem is How can pass this connection string to my dbcontext
?
在我的模型层(dbcontext)
我有这个:
public partial class ShirazRailwayEntities : DbContext
{
public ShirazRailwayEntities()
: base("name=ShirazRailwayEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Advertisement> Advertisements { get; set; }
public DbSet<Line> Lines { get; set; }
public DbSet<Log> Logs { get; set; }
public DbSet<Path> Paths { get; set; }
public DbSet<Sensor> Sensors { get; set; }
public DbSet<Station> Stations { get; set; }
public DbSet<Train> Trains { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<TimeTable> TimeTables { get; set; }
public DbSet<ConfigFont> ConfigFonts { get; set; }
public DbSet<ArrivalTime> ArrivalTimes { get; set; }
public DbSet<ConfigColor> ConfigColors { get; set; }
}
推荐答案
添加另一个构造函数你的连接字符串:
Add another constructor that takes your connection string:
public partial class ShirazRailwayEntities : DbContext
{
public ShirazRailwayEntities()
: base(name: "ShirazRailwayEntities")
{
}
public ShirazRailwayEntities(string connectionName)
: base(name: connectionName)
{
}
}
var context = new ShirazRailwayEntities("whatever connection name you want");
这篇关于将dbcontext连接字符串传递给DALayer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!