Почему мое значение не сохраняется в базе данных с помощью LINQ? - PullRequest
1 голос
/ 11 января 2010

Я использую следующий оператор LINQ для обновления записи в таблице с текущей датой / временем:

MembershipClassesDataContext db = new MembershipClassesDataContext();
var tmp = db.drun_addqol_2_usrs.SingleOrDefault(y => !y.done.HasValue && y.UserId.Equals(Membership.GetUser().ProviderUserKey.ToString()));
tmp.done = DateTime.Now;
// at this point, tmp.done has the correct value!
// also the entry isn't null because I got the correct ID with tmp.UserId
// But db.GetChangeSet().Count is zero (0), so the value of "done" is changed but not commited to the ChangeSet?!
db.SubmitChanges();

"done" - это столбец с типом DateTime, и после указанного выше запроса он не должен быть нулевым, а должен содержать фактическую дату / время Но ... он не обновляется, и значение по-прежнему равно нулю.

Есть идеи, где моя ошибка?

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 11 января 2010

Является ли объект, возвращаемый из SingleOrDefault, тем, который уже существует в БД, или новым объектом по умолчанию? если он новый, вы должны добавить его в набор данных, иначе .submitchanges не сохранит его.

0 голосов
/ 04 февраля 2010

Интересно, если tmp присоединен к вашему тексту данных?

Попробуйте -

db.drun_addqol_2_usrs.Attach(tmp)

, а затем позвоните

SubmitChanges()

либо сработает, либо сгенерирует исключение с жалобой на то, что он не может присоединить объект к контексту данных, когда он уже присоединен к контексту данных, или что-то в этом роде.

0 голосов
/ 15 января 2010

Глупый вопрос - в коде конструктора для drun_addqol_2_usrs оператор if для установщика оценивается как true (и вызывает свойство измененный материал)?

set
{
    if ((this._done != value))
    {
        this.OndoneChanging(value);
        this.SendPropertyChanging();
        this._done = value;
        this.SendPropertyChanged("done");
        this.OndoneChanged();
    }
}
0 голосов
/ 11 января 2010

Прежде чем вызывать db.SubmitChanges (), вызовите db.GetChangeSet (), чтобы определить, считает ли L2S какие-либо строки для обновления. Если набор изменений пуст, то ваш метод SingleOrDefault () должен ничего не возвращать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...