Thực tiễn tốt nhất về thiết lập DataContext của tôi để dễ dàng truy cập vào các lớp LinqToSql mở rộng của tôi là gì?LinqToSql khai báo và khởi tạo thực hành tốt nhất của DataContext?
Ví dụ, tôi có một "tài khoản" thực thể trong dbml của tôi và tôi muốn thêm phương pháp để lớp đó như sau:
Partial Public Class User
Public Function GetUser(ByVal UserID as Integer) as User
'Do Work
End Function
End Class
Để truy cập vào DataContext của tôi, tôi sẽ phải khai báo nó bên trong phương pháp như vậy:
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
Tôi không muốn làm điều đó cho mọi phương pháp. Thông thường (nếu tôi không mở rộng các lớp dbml LinqToSql) Tôi chỉ có thể làm điều này:
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
Điều này sẽ cho phép tôi để truy cập DataContext cho từng phương pháp mà không cần phải khai báo nó mới mỗi lần. Nhưng tất nhiên bạn không thể làm điều đó bởi vì dbml đã có một hàm tạo. Và việc thêm mã vào dbml luôn bị ghi đè nếu có bất kỳ điều gì thay đổi.
Bất kỳ ai có ý tưởng hay về cách tự lưu một số mã vượt quá ở đây?
TIA!
Ngữ cảnh dữ liệu thực sự khá nhẹ, mặc dù nó có thể tham chiếu rất nhiều thực thể. Vứt bỏ nó để giải phóng các thực thể là một ý tưởng thực sự tốt. Nếu nó là một vật nặng, tôi sẽ nghiêng nhiều hơn để giữ nó xung quanh nên tôi không phải tái tạo nó. – tvanfosson
@tvanfosson đó là ý của tôi; chỉnh sửa để làm cho điểm đó rõ ràng hơn. DC có khả năng mang theo rất nhiều trọng lượng với nó; tốt nhất để loại bỏ nó càng nhanh càng tốt. –
Các đối số chống xử lý: http://stephenwalther.com/blog/archive/2008/08/20/asp-net-mvc-tip-34-dispose-of-your-datacontext-or-don-t.aspx –