linq2sql: не могу получить объект во второй раз - PullRequest
1 голос
/ 03 января 2011

В моем приложении один объект выбирается из БД с запросом, подобным следующему:

IList<MyObject> objects = GetContext()
    .GetTable()
    .Where(obj=>obj.ParentId==iParentId)
    .ToList()
    ;

После получения из базы данных данные из списков объектов копируются в список бизнес-объектов. Позже мне нужно обновить этот объект новыми данными от бизнес-объекта. Для этого мне нужно получить «сущность БД» из базы данных, обновить ее поля и вызвать «SubmitChanges ()».

Проблема в том, что «2nd fetch from DB» не работает. Следующий запрос:

MyObject objectToBeUpdated = GetContext()
    .GetTable()
    .Where(obj=>obj.Id==iObjectId)
    .SingleOrDefault()
    ;

возвращает ноль ..

Q1. Почему я получаю «ноль» здесь? Может ли это быть вызвано тем, что мне нужно каким-то образом «освободить» 1-ю сущность? Или мне нужно запомнить исходную сущность (не извлекать ее снова из БД) и обновить ее?

Q2. Как получить сущность во второй раз?

P.S. На самом деле, я бы предпочел предотвратить 2-й выбор, но было бы хорошо узнать причину, что здесь не так.

Большое спасибо.

P.S. Я использую MSSQL 2005, VS2008, Linq2sql.

1 Ответ

0 голосов
/ 24 марта 2011

Я полагаю, он возвращает null, потому что нет записи, которая удовлетворяла бы вашему предложению where.Поскольку вы вызываете SingleOrDefault (), он возвращает вам объект по умолчанию, который является нулевым.Вместо этого, если вы вызовете Single (), вы получите исключение.Проверьте, есть ли у вас записи в БД, которые удовлетворяют условию

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