【问题标题】:Where to put extra functionality for the database layer (Linq-to-SQL)为数据库层添加额外功能的位置 (Linq-to-SQL)
【发布时间】:2008-10-10 17:00:15
【问题描述】:

在使用 Linq-to-SQL 的数据库层中实现额外功能的最佳方法是什么?目前我正在考虑实现基于预设和类似任务添加信息的功能?

插入、更新和删除需要访问DataContext,而在Table 类中,您无权访问上下文。我见过使用 Singletons 的解决方案,但这似乎是一个 hack,我想知道是否有其他人遇到过这个问题,你的解决方案是什么?有没有更好的方法来实现类似的功能。

我希望将此功能添加到数据库层的原因是我有几个应用程序都使用相同的数据库对象,我希望能够从所有应用程序中使用这些功能,因此我不必重写很多代码。


这不是我的意思。我希望能够执行复杂的操作,例如根据第一个表中的信息更新一个表并将记录添加到另一个表。

假设我选择了一条客户记录,我想用信息更新它,当这种情况发生时,我希望它在“更新”表中添加另一条记录,以跟踪更新发生的时间和执行者。这当然只是一个例子。需要做的事情可能更复杂。

基本上,我想向表对象添加一个方法,以对该表中的特定行进行修改,然后对其他对象进行插入和更新。我知道你可以使用部分类,我已经广泛使用了。

例子:

db.Customers.Where(c => c.CustomerID == 5).AddOrder(orderDetails);

我觉得我真的无法用语言来表达我的问题以使其易于理解:)

【问题讨论】:

    标签: .net linq linq-to-sql design-patterns


    【解决方案1】:

    Linq to SQL 中的实体类是部分的。你可以用你需要的规则来扩展它们。

    或者您可以构建自己的业务实体,从 Linq 到 SQL 实体。然后,您的业务实体将包含有关何时做什么的规则。

    【讨论】:

      【解决方案2】:

      如果您只是在一般情况下为 linq 或任何类添加一些包装器功能之后,您是否可以通过使用静态辅助方法来使用 C# 3 及更高版本中的扩展方法方法:

      public static class StringExtensions 
      {
          public static int ToInt(this string oString)
          {
              return int.Parse(oString);
          }
      }
      

      这样您就可以拥有一个静态帮助器类,该类提供特定于特定类的帮助器功能,您可以在项目之间进行移植,或者可能夹入单独的 DLL 并在需要的地方导入?

      【讨论】:

        【解决方案3】:

        我不想这么说,但是存储过程呢?

        在我的项目中,无论我们想提供什么额外的功能,我们都坚持使用部分类。数据上下文类被标记为部分,因此您可以将方法添加到上下文中,而不必担心重新生成上下文会破坏您的工作。

        【讨论】:

          【解决方案4】:

          您可以将通用数据上下文扩展用于常见的数据访问方法,如插入、删除等,如http://weblogs.asp.net/stephenwalther/archive/2008/08/26/asp-net-mvc-tip-38-simplify-linq-to-sql-with-extension-methods.aspx 中所述。和 Will 建议的不太常见功能的部分类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-16
            相关资源
            最近更新 更多