2013-07-19 3 views
1

Я создаю веб-сайт ASP .NET и хотел бы использовать Linq для SQL-класса для моего datalayer, а затем создать другой проект, который будет обслуживать datalayer. Im довольно новый с Linq to SQL.Linq to SQL Использование DataContext

У меня есть интерфейс, в котором перечислены все операции CRUD (Create, Read, Update and Delete), которые мне нужны для каждой таблицы в базе данных в отдельном интерфейсе.

то у меня есть еще один класс, который реализует интерфейс был я писать все мой код, чтобы получить, обновление, удаление данных и т.д. т.е.

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

Что я заметил, был я всегда писал дим Service As New 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

Вы должны создавать новый контекст данных каждый раз, потому что вы хотите быть уверены, когда Submit Изменения происходит. Это следует за шаблоном разработки программного обеспечения под названием Unit Of Work, где вы открываете контекст, выполняете кучу работы в дереве сущностей, а затем нажимаете submit. Сделайте это всего одним способом, чтобы всем было ясно и понятно, что происходит в будущем.

Если вы перемещаете объект create в свойство, это не так ясно, когда изменения отправки влияют. У вас может быть один способ открыть его, другой внести некоторые изменения, третий сделать Submit Changes, а затем сделать еще несколько изменений, которые затем не будут отправлены, что будет трудно обнаружить.

Я знаю, что это выглядит как шаблон, не DRY (не повторяйте себя), но по-прежнему хорошая практика программирования.

Вот подробное объяснение более подробно об использовании Submit Changes от Scott Guthrie.

+0

Спасибо, я посмотрю ссылки, размещенные сейчас. Просто так я правильно понял вас, вы говорите, что у меня есть хорошо, и продолжайте с того, что предложили я или вы говорите, что дизайн, который я предложил, хорош, но мне нужны дополнительные плиты котла для вставки и т. Д. В созданном мной классе? Большое спасибо – Computer

+1

Продолжайте работать с тем, что у вас есть, Dim в новом DataStoreContext в начале каждой функции. Это не проблема, когда вы читаете (выбираете), но когда вы входите в обновление объектов, вам нужен приятный процесс: новый контекст, объекты обновления, отправьте все изменения. –

+0

Простите еще одну мысль. Мое свойство создает экземпляр New - не означает ли это, что каждый раз, когда я вызываю этот метод, он будет создавать экземпляр New для каждого метода? Поэтому каждый раз он имеет новый контекст? Спасибо – Computer

Смежные вопросы