在何处为数据库层添加额外功能(Linq-to-SQL)

时间:2008-10-10 17:00:15

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

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

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

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


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

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

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

示例:

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

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

4 个答案:

答案 0 :(得分:1)

Linq to SQL中的实体类是部分的。您可以使用所需的规则扩展它们。

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

答案 1 :(得分:1)

如果您纯粹是在为linq或任何类添加一些包装器功能之后,您是否可以在C#3及更高版本中使用扩展方法方法,方法是在这些行中使用静态帮助器方法:

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

这样你就可以有一个静态助手类,提供特定类的助手功能,你可以在项目之间进行移植,或者可能只需要插入一个单独的DLL并在需要的地方导入?

答案 2 :(得分:0)

我不想这么说,但存储过程怎么样?

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

答案 3 :(得分:0)

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