LINQ 2 SQL:部分类

时间:2010-04-13 17:13:22

标签: c# linq-to-sql datacontext data-access-layer

我需要根据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

1 个答案:

答案 0 :(得分:1)

你应该处理你的背景,因为它是一次性的。考虑在创建新上下文时将语句包装在using块中。

我可以将静态“New”属性表示为“Create”方法。属性创建新对象是不正常的,因此需要使用代码的其他开发人员可能会对此行为感到惊讶。

除此之外,您的方法将起作用。获取上下文时,确定连接字符串的逻辑运行,您将获得使用正确连接字符串构造的上下文。

如果我是你,我不会将你的所有方法和属性都保持为静态。它违背了良好的OO设计,并使您非常熟悉特定的实现 - 但是,我想这不是问题的范围。