Linq to SQL Обновление через проблемы с BLL - Лучшие практики - PullRequest
0 голосов
/ 02 марта 2009

Настройка:

У меня есть большая форма со многими полями, которые собираются для обновления объекта Product. Таким образом, на странице ASPX пользователь изменяет поля, которые необходимо обновить, и нажимает кнопку Отправить. В коде позади я делаю что-то вроде этого;

Dim p as New MyCompany.Product()
p = p.GetProductById(ProductID)

Я расширяю частичный класс Product Linq до SQL, чтобы добавить этот метод (GetProductById) к объекту

p.Name = txtName.Text
p.SKU = txtSKU.Text
p.Price = txtPrice.Text
...    
p.Update()

Это метод Update в расширенном частичном классе Product. Я обновляю базу данных, отправляю электронные письма и обновляю таблицы истории, поэтому хочу, чтобы этот метод делал все это.

Есть еще 50 полей для проекта, поэтому очевидно, что было бы смешно иметь метод, который собирает все 50 полей (и я все равно не хочу идти по этому пути, потому что IMO труднее отлаживать)

Проблема:

Если я получаю Продукт через Linq to SQL с использованием DataContext, то я никогда не смогу обновить его снова, потому что он ошибается из-за невозможности присоединения и объекта, который уже присоединен к другому DataContext.

Вопрос:

ТАК, если я получаю объект с помощью метода в моем BLL, обновляю его на странице ASPX и затем снова пытаюсь отправить обновления через BLL, чтобы обновить базу данных, как мне это сделать?

1 Ответ

0 голосов
/ 02 марта 2009

Независимо от LINQ-to-SQL или нет, вот что я делаю. После отправки я ищу элемент (это должно быть быстро, если это единственный элемент, использующий PK), мой DAL возвращает объект данных, и я использую отражение для сопоставления каждого элемента на странице с соответствующими свойствами в объекте данных. Мой DAL обновляет только те элементы, которые изменились.

Я думаю, что вы должны сделать то же самое, собрать все значения и представить их. Если LinqToSql недостаточно умен, чтобы определить, что изменилось, возможно, это не лучшая альтернатива.

...