2013-07-19 84 views
1

我正在创建一个ASP .Net网站,并且想为我的数据层使用Linq to SQL类,然后有另一个将服务数据层的项目。林Linq to SQL相当新。Linq to SQL DataContext的用法

我拥有的结构是一个接口,它列出了我在单独的接口中为数据库中的每个表所需的所有CRUD(创建,读取,更新和删除)操作。

然后我有另一个类,它实现的接口是我写我的代码来获取,更新,删除数据等即

Public Function GetCustomers As Iqueryable(of Customer) 
Dim Service as New StoreDataContext 
Return From c in Service.Customers select c 
End Function 

什么我注意到我总是在所有写昏暗的服务作为新StoreDataContext我的方法是为了对我的数据做任何事情。

这使我想到并在每个类中创建一个属性,并用datacontext初始化该属性。多走了一步好我想创建一个为MustInherit类,所以所有的类会再继承这个类,并需要作出可能在一个阶段来完成,而不是进入所有类

Public MustInherit Class MyService 

    Public ReadOnly Property CurrentDataContext As StoreDataContext 
     Get 
      Return New StoreDataContext 
     End Get 
    End Property 

End Class 

我的客户的任何变化类看起来像

Public Class CustomerSer 
Inherits MyService 
Implements ICustomer 

Public Function GetCustomers As Iqueryable(of Customer) 
Return From c in CurrentDataContext.Customers select c 
End Function 

正如你可以告诉上面的函数正在使用CurrentDataContext这是从创建的类继承。

问题:

  1. 这是正确的还是会有在这个设计中的一些缺陷?
  2. 我是否需要在任何阶段或在我的课程中关闭此服务?

感谢

回答

1

,因为你要确保在提交更改时,您应该创建一个新的数据上下文中的每个时间。这遵循一个名为Unit Of Work的软件工程模式,在这里你打开一个上下文,在实体树上做一堆工作,然后点击提交。用一种方法来完成这一切,以便将来任何人都能清楚地了解正在发生的事情。

如果您将创建移动到属性中,则不太清楚提交更改会影响到什么位置。你可以用一种方法打开它,另一种做一些改变,三分之一做提交改变,然后再做一些更改,然后不提交,这将很难检测到。

我知道,这看起来像样板,不是干(不要重复自己),但仍然是良好的编程习惯。

下面是关于使用提交更改Scott Guthrie的更详细的说明。

+0

谢谢,我将看看现在发布的链接。就这样,我正确地理解了你,你是说我有什么是好的,并继续提出什么建议,或者你说我设计的设计是好的,但我需要额外的锅炉板插入等我创建的类?非常感谢 – Computer

+1

继续您的工作,在每个函数的开始处Dim一个新的DataStoreContext。当你正在进行读取(选择)时,这不是一个问题,但是当你进入更新对象时,你需要一个很好的过程:新的上下文,更新对象,提交所有的改变。 –

+0

对不起,还有另一个想法。我的属性创建一个新实例 - 这不就是说,每次我调用该方法时,它会为每个方法创建一个新实例?因此每次都有一个新的环境?谢谢 – Computer

相关问题