Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Linq2Sql, проблемы с Update 
V
    Опции темы
Red Wind
Дата 10.7.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Доброго времени суток,
Работаю с Linq2Sql, пытаюсь делать Update отсоединённой записи. Но он не работает. Ошибок не падает, но обновление не происходит и профайлер не показывает обращений к базе. Insert и Select работают нормально. Вот код:
Код

    public class DataProvider: IDataProvider
    {
        private const string ConnectionStringName = "Veles.BloodPressure.LinqToSqlDal.Properties.Settings.BloodPressureConnectionString";
        private static BloodPressureDataContext BloodPressure = new BloodPressureDataContext(ConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString);

        public void UpdateUser(UserDto userDto)
        {
            var user = GetUserEntity(userDto);
            BloodPressure.Users.Attach(user);
            BloodPressure.SubmitChanges();
        }

        public static User GetUserEntity(UserDto dto)
        {
            var user = new User
            {
                Address = dto.Address
                DateOfBirth = dto.DateOfBirth,
                Email = dto.Email,
                FirstName = dto.FirstName,
                UserId = dto.UserId,
                LastName = dto.LastName,
                Login = dto.Login,
                Password = dto.Password,
                Phone1 = dto.Phone1,
                Phone2 = dto.Phone2,
                Note = dto.Note
            };
            return user;
        }
}


Это сообщение отредактировал(а) Red Wind - 10.7.2009, 00:19
PM MAIL ICQ   Вверх
KelTron
Дата 10.7.2009, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 5
Всего: 38



А так чем не устраивает?

Код

public void UpdateUser(UserDto userDto)
{
    var user = BloodPressure.Users.Single(u => u.UserId == userDto.UserId);
    user.Address = userDto.Address;
    user.DateOfBirth = userDto.DateOfBirth;
    user.Email = userDto.Email;
    user.FirstName = userDto.FirstName;
    user.LastName = userDto.LastName;
    user.Login = userDto.Login;
    user.Password = userDto.Password;
    user.Phone1 = userDto.Phone1;
    user.Phone2 = userDto.Phone2;
    user.Note = userDto.Note;

    BloodPressure.SubmitChanges();
}



Это сообщение отредактировал(а) KelTron - 10.7.2009, 04:59


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Idsa
Дата 10.7.2009, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Red Wind, эта последовательность действий:
Код

            BloodPressure.Users.Attach(user);
            BloodPressure.SubmitChanges();

бессмысленна: при аттаче сущность будет помечена неизмененной (ну действительно, откуда LINQ To SQL знать, какие поля Вы изменяли, а какие - нет).

Attach имеет смысл, когда у Вас 2 версии одного и того же объекта: считанная (содержащая original values) и измененная. Тогда можно сделать Attach считанной сущности, затем внести в приаттаченную сущность изменения на основании данных измененной сущности и сделать Submit.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Red Wind
Дата 10.7.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Idsa,  спасибо за инфу. Понял, что надо почитать матчастьsmile.
Я добавил вызов метода Refresh. Теперь всё заработало.
Код

            BloodPressure.Users.Attach(user);
            BloodPressure.Refresh(RefreshMode.KeepCurrentValues, user);
            BloodPressure.SubmitChanges();

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.