У меня настроена связь один ко многим. (Например, человек с большим количеством телефонных номеров). В моем запросе на получение у меня есть this.ObjectContext.Person.Include("PhoneNumbers")
и сгенерированные метаданные, включая public EntityCollection<PhoneNumbers> PhoneNumbers{ get; set; }
. Я также настроил DTO с этим и другими свойствами, которые мне нужны.
[Include]
[Association("Name","thisKey","otherKey")]
public IEnumerable<PhoneNumbers> PNums { get; set; }
Я могу получить все данные в порядке и отобразить их в Silverlight, но когда я создаю новый, у меня возникают проблемы. У меня происходит вот такая штука:
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();
:
Сообщение = "Отправить операцию не удалось проверить. Пожалуйста, проверьте 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 добавляет мой объект и вызывает его собственный метод вставки. Итак, я сначала прокатился с ним и просто установил свойство в пользовательском интерфейсе, тогда это выдало бы мне эту ошибку:
Сообщение = "Операция отправки не удалась. Произошла ошибка при обновлении записей. Подробности см. во внутреннем исключении. Внутреннее сообщение об исключении: невозможно вставить явное значение для столбца идентификации в таблице 'iset_trkr_writeback', когда для параметра IDENTITY_INSERT установлено значение OFF".
Я никогда ничего не устанавливал в поле идентификации, я думал, что RIA сделает это за меня. Но когда я отлаживаю и смотрю, значение равно 0. Но, по крайней мере, на этот раз он вызывает мой метод вставки в моем сервисе... Может быть, я что-то упустил в своем процессе, но мне действительно не помешала бы помощь. Спасибо:)