Linq не может найти вставленную запись перед отправкой - PullRequest
8 голосов
/ 05 января 2012

У меня есть этот бит кода:

LinqDataContext ctx;

MyRecord R = new MyRecord();
R.Title = "test";
ctx.AllRecords.InsertOnSubmit(R);

bool bExists = ctx.AllRecords.Any(r => r.Title == "test");

Примечание: я не вызывал SubmitChanges.

Почему bExists возвращается как ложное?Разве Linq не должен видеть вставленную запись?

Ответы [ 2 ]

8 голосов
/ 05 января 2012

См. Linq не может записывать значения в БД, если submitchanges () не вызывается.

И для второго вопроса, Да, Linq кэширует объекты перед отправкой. Мы также можем получить записи, которые находятся в кеше, но не отправлены в базу данных.

Как вы вставили запись выше, мы можем получить выше записи из кэша datacontext, как показано ниже:

Сначала получите набор изменений из DataContext как:

System.Data.Linq.ChangeSet MySet = ctx.GetChangeSet();

После этого извлеките свою форму записи Набор изменений:

MyRecord b = (MyRecord )MySet.Inserts.Last();

Вы получите MyRecord с заголовком как «тест», который вы вставили.

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

1 голос
/ 05 января 2012

Я считаю, что

bool bExists = ctx.AllRecords.Any(r => r.Title == "test"); 

- это SQL-запрос, который SQL-сервер возвращает результат.Так что если вы не отправили, то БД ничего не знает о:

MyRecord R = new MyRecord(); 
R.Title = "test"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...