在使用Linq到SQL的数据库层中实现额外功能的最佳方法是什么?目前,我正在考虑实现基于预设和类似任务添加信息的功能?
插入、更新和删除需要访问DataContext
,而在Table
类中,您无权访问上下文。我见过使用Singleton的解决方案,但这似乎是一个黑客攻击,我想知道是否有其他人遇到过这个问题,你的解决方案是什么?有没有更好的方法来实现类似的功能。
我希望将此功能添加到数据库层的原因是,我有几个应用程序都使用相同的数据库对象,我希望能够使用所有应用程序中的这些函数,这样我就不必重写很多代码。
我不是这个意思。我希望能够执行复杂的操作,比如更新一个表,并根据第一个表中的信息将记录添加到另一个表中。
假设我已经选择了一个客户记录,我想用信息更新它,当这种情况发生时,我希望它将另一个记录添加到"更新"表中,以跟踪更新发生的时间和更新的人。这当然只是一个例子。需要做的事情可能更复杂。
基本上,我想向表对象添加一个方法,对该表中的特定行进行修改,然后对其他对象进行插入和更新。我知道你可以使用偏类,我已经广泛使用了。
示例:
db.Customers.Where(c => c.CustomerID == 5).AddOrder(orderDetails);
我觉得我真的无法用语言来表达我的问题:)
Linq到SQL中的实体类是分部的。你可以用你需要的规则来扩展它们。
或者,您可以从Linq到SQL实体构建自己的业务实体。然后,您的商业实体将包含何时做什么的规则。
如果你只是想在linq或任何类周围添加一些包装器功能,你能不能在C#3和更高版本中使用以下静态辅助方法来使用扩展方法:
public static class StringExtensions
{
public static int ToInt(this string oString)
{
return int.Parse(oString);
}
}
这样,你就可以有一个静态的助手类,提供特定于特定类的助手功能,你可以在项目之间移植,或者可能插入一个单独的DLL,只在需要的地方导入?
我不想这么说,但存储过程呢?
在我的项目中,无论我们想要提供什么额外的功能,我们都坚持使用分部类。数据上下文类被标记为partial,因此您可以将方法添加到上下文中,而不用担心重新生成会破坏您的工作的上下文。
您可以将通用数据上下文扩展用于常见的数据访问方法,如中所述的插入、删除等http://weblogs.asp.net/stephenwalther/archive/2008/08/26/asp-net-mvc-tip-38-simplify-linq-to-sql-with-extension-methods.aspx.以及Will建议的不太常见功能的分部类。