LINQ to SQL

При попытке использовать LINQ to SQL я столкнулся с несколькими проблемами.

У меня есть столовые люди:

  • int ID
  • строка firstName
  • строка lastName

И таблица примечаний, которая имеет:

  • int ID
  • строка noteText
  • строка создана
  • datetime creationDate
  • int PersonID

PersonID - это внешний ключ, и отношение равно 1: n

Я пытался использовать LINQ to SQL, чтобы создать человека и несколько заметок для каждого человека.

Person person =  new person();
Person.firstName = "me";
Person.note = new note();   
Person.note.noteText = "some text…"; 

_DataContext.Persons.InsertOnSubmit(person);   
_DataContext.SubmitChanges();

Проблема в том, что объект person еще не существует в БД, поэтому у него еще нет идентификатора. Таким образом, поле note.personID имеет значение 0 ... (поле идентификатора является полем идентификации на сервере SQL)

Единственное решение, которое я нашел, - создать человека, отправить изменения, а затем снова создать заметку и отправить изменения.

Я что-то здесь упускаю или, может быть, так нужно работать с LINQ to SQL?

Как я могу добавить несколько заметок на человека с LTS? У меня отношения 1: n, и я не вижу их с LTS.

Если у человека есть 10000 заметок, я не хочу, чтобы конструктор объекта person загружал все его заметки. Я хочу загрузить их только тогда, когда я обращаюсь к ним. Как я могу настроить LTS для загрузки заметок по требованию?

14.12.2008 17:30:18
Ваш PersonID является внешним ключом в таблице заметок? Если так, то это должно автоматически управляться так, как вы хотите
JohnIdol 14.12.2008 18:13:37
Очень хорошо написанный вопрос! +1
Jarrod Dixon♦ 1.04.2009 08:18:55
1 ОТВЕТ
РЕШЕНИЕ

Если вы не используете конструктор классов LinqToSql, подумайте об этом. Сгенерированные им классы будут поддерживать описанный вами сценарий вставки.

Я могу сказать, что вы не используете конструктор, потому что он даст вам свойство Notes (множественное число) для Person ... поскольку Person - это 1 ко многим с Notes.

Как я могу настроить LTS для загрузки заметок по требованию?

Дизайнер сгенерирует свойство типа EntitySet (Note), которое будет загружать Notes по требованию.

3
14.12.2008 18:48:41
Ну, на самом деле я использую конструктор, я просто добавил свои таблицы с отношениями из БД, и это не работает, как вы описали. может мне стоит что-то настроить, чтобы изменить способ работы? Я настроил отношения, чтобы быть 1 ко многим, и до сих пор нет коллекции заметок или что-то ...
Omri 15.12.2008 07:56:19
Хм. Хорошо. Вот блог Скотта Гатри о дизайнере. weblogs.asp.net/scottgu/archive/2007/05/19/… Он показывает сценарий вставки, который вы описываете. Проверьте свойства отношения, чтобы убедиться, что это Person.Id to Note.PersonId
Amy B 15.12.2008 13:40:52
Да, обнаружил проблему, отношения не были правильно настроены на сервере SQL. сейчас все работает просто замечательно. Спасибо всем. Омри.
Omri 16.12.2008 15:14:17