LINQ 2 SQL:部分类

Posted

技术标签:

【中文标题】LINQ 2 SQL:部分类【英文标题】:LINQ 2 SQL: Partial Classes 【发布时间】:2011-02-07 13:35:21 【问题描述】:

我需要根据 AppSetting 为我的 DataContext 设置 ConnectionString。我试图通过为每个 DataContext 创建一个部分类来做到这一点。以下是我到目前为止所拥有的,我想知道我是否忽略了什么?

具体来说,我是否正确处理了我的 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

【问题讨论】:

作为奖励,如果有人有在非 WEB 环境中使用 L2S 的良好链接,我将不胜感激。我仍在为如何为我的 LOB 桌面应用程序构建它而苦苦挣扎。 【参考方案1】:

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

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

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

如果我是你,我不会你所有的方法和属性都是静态的。它违背了良好的 OO 设计,并且使您非常专注于特定的实现 - 但是,我想这不在问题的范围内。

【讨论】:

更新和插入也是如此?在方法中创建这样的实例就可以了吗?此外,“除此之外,您的方法将奏效。” :) 不要给我糖衣,否则我永远学不会。这是一种可怕的结构方式吗?就像,糟糕到你几乎要作呕?如果是这样,请说出来。 Lone Wolf,新手,在美国威斯康星州西部山区的程序员和代码审查对我来说是一个神话...... ;) 感谢您的回答!

以上是关于LINQ 2 SQL:部分类的主要内容,如果未能解决你的问题,请参考以下文章

实体框架/Linq to sql 模型到业务模型

将“额外数据”添加到 LINQ to SQL 生成的实体?

C#部分类与部分方法

LINQ TO SQL

如何在 EntityFramework Core 中使用部分类和部分 OnModelCreating 方法扩展 DbContext

单元测试引用了关键部分类