Linq TO SQL Query Ожидание вставленных записей - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно запросить DataContext для данных и вернуть ему то, что находится на серверной части, а также любые ожидающие обновления и вставки. Получение ожидающих обновлений легко, L2S делает это уже без особых проблем. Но ожидающие вставки, это разные звери и ведут себя по-разному в разных ситуациях.

Data before any Update/Insert:
PersonKey  FirstName      LastName      DateOfBirth
1          RICHARD        JONES         NULL
2          PAUL           ROGERS        01/21/1945

    int key = 1;
    NtsSuiteDataContext DbContext = new NtsSuiteDataContext();
    Person newPerson = new Person
    {
        FirstName = "DAVID",
        LastName = "SMITH"
    };
    DbContext.Persons.InsertOnSubmit(newPerson);

    Person updatePerson = DbContext.Persons.First(p => p.PersonKey == key);
    updatePerson.DateOfBirth = new DateTime(1970, 1, 2);

    var personList = DbContext.Persons.ToList();

Data after any Update/Insert:
PersonKey  FirstName      LastName      DateOfBirth
1          RICHARD        JONES         01/02/1970
2          PAUL           ROGERS        01/21/1945

Теперь я знаю, что могу запросить DbContext.GetChangeSet (). Вставки для этих типов вставок, но делать это для каждого запроса становится немного грязно при написании кода.

Здесь у меня есть другой пример, с таблицей ссылок, два разных запроса, один возвращает вставленную запись, а другой - нет. Я вроде понимаю, но все же, почему L2S сможет получить запись, которую я создал здесь, в одном запросе, а не в другом.

Data before any update/inserts
PersonContactKey    PersonKey     ContactKey  ContactTypeKey
1                   1             1           1

    Person person = DbContext.Persons.First(p => p.PersonKey == key);
    PersonContact newPersonContact = new PersonContact
    {
        ContactTypeKey = 1,
            Description = "(555) 111-2222
    };
    DbContext.PersonContacts.InsertOnSubmit(newPersonContact);
    person.PersonContacts.Add(newPersonContact);
    newContact.PersonContacts.Add(newPersonContact);

    var list1 = DbContext.PersonContacts.Where(pc => pc.Person.PersonKey == key).ToList();
    var list2 = DbContext.Persons.First(p => p.PersonKey == key).PersonContacts.ToList();


list1 only has only the one personcontact record that already exists.
list2 has both the existing personcontact record and the new record  created above. 

Data after any update/inserts (list1)
PersonContactKey    PersonKey     ContactTypeKey  Description
1                   1             1               (123) 456-7890

Data after any update/inserts (list2)
PersonContactKey    PersonKey     ContactTypeKey  Description
1                   1             1               (123) 456-7890
0                   1             1               (555) 111-2222

TIA за любые комментарии и помощь. Я понимаю, что так оно и есть, просто подумал, что, может быть, у кого-то есть лучший способ получения записей INSERTED, если я запросил эти объекты до того, как я выполнил SubmitChanges () для DataContext.

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