2009-12-20 2 views
1

Я включаю DotNetOpenAuth на мой сайт asp.net. Я новичок в инфраструктуре Entity. Database.DataContext.AddToUser (пользователь), расположенный в LogingFrame.aspx.cs, не добавляет пользователя в базу данных. Пользователь и аутентификация. Записи заполняются правильно. Тот же код из проекта шаблона, который указывает на одну и ту же базу данных, отлично работает. Вероятно, я пропустил что-то во время регистрации. Не могли бы вы указать, что я должен проверить? Пожалуйста, дайте мне знать, если вам нужен какой-либо код.DotNetOpenAuth - Database.DataContext.AddToUser (пользователь) не работает

ответ

1

... не добавляет пользователя в базу данных. Пользователь и аутентификация. Записи заполняются правильно.

Ваш вопрос, кажется, противоречит самому себе, или я читаю его неправильно. Похоже, вы говорите, что пользователь не добавлен, но затем добавляется пользователь.

Позвольте мне взять у него удар, и вы узнаете, как работает этот шаблон проекта. Транзакция базы данных обертывает все изменения базы данных в рамках одного HTTP-запроса. Он встроен в сборку RelyingPartyLogic, чтобы иметь такое поведение. Кроме того, в конце успешного HTTP-запроса (который не привел к необработанному исключению) вызывается SaveChanges() и транзакция совершена. Если генерируется необработанное исключение, изменения и транзакция откатываются назад. Это помогает защитить целостность вашей базы данных.

Побочный эффект от этого, однако, заключается в том, что если вы отлаживаете метод «добавить пользователя», и после того, как вы увидите выполненный вами AddToUser, вы переходите к таблице пользователей, чтобы узнать, добавлено ли оно, t, потому что SaveChanges еще не был вызван и транзакция еще не выполнена.

Для стандартного поведения платформы Entity Framework необходимо сохранить вызовы SaveChanges, чтобы ваши изменения сохранялись в базе данных, но, как я уже говорил, библиотека RelyingPartyLogic выполняет этот вызов для вас. Но иногда вам может потребоваться самостоятельно вызвать SaveChanges в вашем собственном коде, чтобы (например) получить идентификатор недавно добавленной строки. Это работает даже в рамках транзакции, прежде чем совершать ее.

Надеюсь, что это поможет.

0

Вы забыли позвонить в DataContext.SaveChanges()?

+0

Хорошо проверить, как правило, но не обязательно для шаблона проекта, так как он автоматически вызывает SaveChanges для пользователя по завершении HTTP-запроса. –

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