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

Настройка:

У меня есть большая форма со многими полями, которые собираются для обновления объекта 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 ответ

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

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

Другие вопросы по тегам