Linq到SQL DataContext的用法
本文关键字:用法 DataContext SQL Linq | 更新日期: 2023-09-27 18:23:50
我正在创建一个ASP.Net网站,并希望为我的数据层使用Linq到SQL类,然后有另一个项目为数据层提供服务。我对Linq的SQL还很陌生。
我拥有的结构是一个Interface,它在一个单独的Interface中列出了数据库中每个表所需的所有CRUD(创建、读取、更新和删除)操作。
然后,我有另一个实现接口的类,如果我编写所有代码来获取、更新、删除数据等,即
Public Function GetCustomers As Iqueryable(of Customer)
Dim Service as New StoreDataContext
Return From c in Service.Customers select c
End Function
我注意到的是,我总是在我的所有方法中编写Dim Service As New StoreDataContext,以便对我的数据执行任何操作。
这让我思考并在每个类中创建一个属性,该属性使用数据上下文初始化该属性。为了更进一步,我想创建一个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,它是从创建的类继承的。
问题:
- 这样可以吗?还是这个设计有缺陷
- 我需要在任何阶段或在课堂上关闭此服务吗
感谢
每次都应该创建一个新的数据上下文,因为您希望确保提交更改发生的时间。这遵循一种称为"工作单元"的软件工程模式,在该模式中,您打开一个上下文,对实体树执行一系列工作,然后点击提交。在一个方法中做到这一切,这样将来任何人都可以很好地清楚地了解发生了什么
如果将创建移动到属性中,则不清楚提交更改在何处生效。你可以让一个方法打开它,另一个方法做一些更改,第三个方法然后提交更改,然后另一个做一些没有提交的更改,这将很难检测到。
我知道这看起来像样板,不是DRY(不要重复),但仍然是很好的编程实践。
这里有一个关于使用Scott Guthrie的Submit Changes的详细解释。