Вставьте Entity в EntityCollection с RIA - PullRequest
0 голосов
/ 14 августа 2010

У меня установлены отношения один ко многим.(Например, Человек со многими телефонными номерами).В моем запросе get у меня есть this.ObjectContext.Person.Include("PhoneNumbers") и сгенерированные метаданные, включая public EntityCollection<PhoneNumbers> PhoneNumbers{ get; set; }. Я также установил DTO с этим и другими необходимыми мне свойствами.

[Include]
[Association("Name","thisKey","otherKey")]
public IEnumerable<PhoneNumbers> PNums { get; set; }

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

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{

   if (dgMMs.SelectedItem != null)
   {
      PhoneNumbers wb = new PhoneNumbers ();
      wb.this = tbThis.Text;
      wb.that =  tbThat.Text;
      wb.other = tbOther.Text;
      wb.whatnot = tbwhatnot.Text;
      ((Person)dgMMs.SelectedItem).PNums.Add(wb);
   }
}

Затем я получаю эту ошибку при вызове TDataSource.SubmitChanges();:

Message = "Отправить операцию не удалось проверить. Пожалуйста, проверьтеEntity.ValidationErrors для каждой сущности в EntitiesInError для получения дополнительной информации. "

Хорошо, я сделал это, и, конечно же, есть ошибка, но я не совсем понимаю, почему.У меня есть необнуляемое поле в базе данных для поля last_modified_by, которое я не установил, когда создавал и добавлял его в entityCollection, и я предполагаю, что это будет причиной, но мой вопрос возникает из-за того, почему RIA не делаетвызовите мой метод Insert в моем сервисе, который я создал, потому что я хочу установить это поле там.Примерно так:

public void InsertPhoneNumber(PhoneNumbers pnum)
{
   pnum.last_modified = DateTime.Today;
   pnum.last_modified_by = Thread.CurrentPrincipal.Identity.Name;
   if ((pnum.EntityState != EntityState.Detached))
   {
      this.ObjectContext.ObjectStateManager.ChangeObjectState(pnum, EntityState.Added);
   }
   else
   {
      this.ObjectContext.PhoneNumbers.AddObject(pnum);
   }
}

Но RIA добавляет мой объект и вызывает его собственный метод Insert.Поэтому я сначала свернул с ним и просто установил свойство в пользовательском интерфейсе, а затем он выдал бы мне следующую ошибку:

Message = "Ошибка операции отправки. Произошла ошибка при обновлении записей.Подробности см. Во внутреннем исключении. Внутреннее сообщение об исключении: Невозможно вставить явное значение для столбца идентификаторов в таблице 'iset_trkr_writeback', когда для IDENTITY_INSERT задано значение OFF. "

Я никогда не устанавливал в поле идентификаторов что-либо, ядумал, что РИА сделает это для меня.Но когда я отлаживаю и смотрю, это имеет 0 для значения.Но, по крайней мере, на этот раз он вызывает мой метод вставки в моем сервисе ... Может быть, я что-то упустил для своего процесса, но я действительно мог бы использовать некоторую помощь.Спасибо :)

1 Ответ

0 голосов
/ 16 августа 2010

Вы используете Entity Framework? Если это так, вам нужен атрибут [Key] как минимум для одного поля в ваших метаданных. Или создайте столбец идентификации / PK (int / guid), а затем обновите метаданные.

...