我需要根据AppSetting为我的DataContext设置ConnectionString。我试图通过为每个DataContext创建一个Partial类来做到这一点。以下是我到目前为止的情况,我想知道我是否忽略了什么?
具体来说,我是否正确处理了我的DataContext(处置,陈旧等)?
这样做我会遇到更新和插入问题吗?文件BLLAspnetdb.cs
是否有用或者是否必要,或者所有文件都应该在生成的partial class AspnetdbDataContext
文件中?
简而言之,这是一个可接受的结构还是会在我详细说明时引起我的问题?
dbml文件名= Aspnetdb.dbml
部分类文件名= Aspnetdb.cs
partial class AspnetdbDataContext
{
public static bool IsDisconnectedUser
{
get
{
return Convert.ToBoolean(ConfigurationManager.AppSettings["IsDisconnectedUser"]) == true;
}
}
public static AspnetdbDataContext New
{
get
{
var cs = IsDisconnectedUser ? Settings.Default.Central_aspnetdbConnectionString : Settings.Default.aspnetdbConnectionString;
return new AspnetdbDataContext(cs);
}
}
}
我创建的文件名= BLLAspnetdb.cs
public class BLLAspnetdb
{
public static IList WorkerList(Guid userID)
{
var DB = AspnetdbDataContext.New;
var workers = from user in DB.tblDemographics
where user.UserID == userID
select new { user.FirstName, user.LastName, user.Phone };
IList theWorkers = workers.ToList();
return theWorkers;
}
public static String NurseName(Guid? userID)
{
var DB = AspnetdbDataContext.New;
var nurseName = from demographic in DB.tblDemographics
where demographic.UserID == userID
select demographic.FirstName +" " + demographic.LastName;
return nurseName.SingleOrDefault();
}
public static String SocialWorkerName(Guid? userID)
{
var DB = AspnetdbDataContext.New;
var swName = from demographic in DB.tblDemographics
where demographic.UserID == userID
select demographic.FirstName + " " + demographic.LastName;
return swName.SingleOrDefault();
}
}
请参阅此前一个问题以及我接触到的背景的接受答案...... switch-connectionstrings-between-local-and-remote-with-linq-to-sql
答案 0 :(得分:1)
你应该处理你的背景,因为它是一次性的。考虑在创建新上下文时将语句包装在using块中。
我可以将静态“New”属性表示为“Create”方法。属性创建新对象是不正常的,因此需要使用代码的其他开发人员可能会对此行为感到惊讶。
除此之外,您的方法将起作用。获取上下文时,确定连接字符串的逻辑运行,您将获得使用正确连接字符串构造的上下文。
如果我是你,我不会将你的所有方法和属性都保持为静态。它违背了良好的OO设计,并使您非常熟悉特定的实现 - 但是,我想这不是问题的范围。