当前位置:  开发笔记 > 后端 > 正文

LinqToSql声明并实例化DataContext的最佳实践?

如何解决《LinqToSql声明并实例化DataContext的最佳实践?》经验,为你挑选了2个好方法。

在我的扩展LinqToSql类中设置DataContext以便于访问的最佳实践是什么?

例如,我的dbml中有一个"User"实体,我想向这个类添加方法,如下所示:

Partial Public Class User

    Public Function GetUser(ByVal UserID as Integer) as User
         'Do Work
    End Function

End Class

为了访问我的DataContext,我必须在方法中声明它,如下所示:

Partial Public Class User

    Public Function GetUser(ByVal UserID as Integer) as User
         Dim dc as New MyDataContext()
         Return (From u in dc.Users Where u.ID = UserID).Single()
    End Function

End Class

我不想为每一种方法都这样做.通常(如果我没有扩展LinqToSql dbml类)我可以这样做:

Partial Public Class User
    Private dc as MyDataContext

    Public Sub New()
         dc = new MyDataContext()
    End Sub

    Public Function GetUser(ByVal UserID as Integer) as User
         Return (From u in dc.Users Where u.ID = UserID).Single()
    End Function

    Public Function GetAllUsers() as IEnumerable(Of User)
         Return From u in dc.Users
    End Function

    'etc...

End Class

这将允许我访问每个方法的datacontext,而不必每次都重新声明它.但是当然你不能这样做,因为dbml已经有了一个构造函数.如果有任何变化,将代码添加到dbml中总会被覆盖.

关于如何在这里保存一些多余的代码,任何人都有任何好的想法?

TIA!



1> Rex M..:

首先,确保在完成后处理DataContext!他可以是一个沉重的小混蛋(编辑不重要实例化,但如果你继续使用它而不处理,则要保持沉重); 你不希望旧的DataContexts在内存中闲逛.

其次,DataContext旨在表示单个逻辑事务.例如,你应该创建一个新的,你要开始一个新的事务,每次,并摆脱它在交易完成.所以为了您的目的,这可能GetUser方法的范围.如果你有一系列需要作为一个组进行的数据库调用,那么在删除之前它们都应该使用相同的DC.



2> Eric King..:

正如Rex M所说,datacontext旨在为每个逻辑事务实例化,使用和处理.像这样的模式有时被称为"工作单元".

我知道的最常见的方法是在using块中实例化datacontext.我有一段时间没用过VB,但看起来应该是这样的:

Using dc As New MyDataContext()
   user = (From u in dc.Users Where u.ID = UserID).Single()
End Using

这不仅增强了事务/工作单元的外观(通过代码的物理形状),而且确保在块结束时在datacontext上调用Dispose().

请参阅此MSDN页面:

通常,DataContext实例设计为持续一个"工作单元",但是您的应用程序定义该术语.DataContext是轻量级的,创建起来并不昂贵.典型的LINQ to SQL应用程序在方法范围内创建DataContext实例,或者作为表示相关数据库操作的逻辑集的短期类的成员.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有