Вставьте Entity в EntityCollection с RIA
У меня установлены отношения один ко многим. (Например, Человек со многими телефонными номерами). В моем запросе 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();
:
Сообщение = "Подтвердить операцию не удалось. Пожалуйста, проверьте 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. Поэтому я сначала свернулся с этим, и просто установил свойство в пользовательском интерфейсе, а затем я получил бы эту ошибку:
Сообщение = "Операция отправки не удалась. Произошла ошибка при обновлении записей. Подробности смотрите во внутреннем исключении. Внутреннее сообщение об исключении: Невозможно вставить явное значение для столбца идентификации в таблице" iset_trkr_writeback ", когда для IDENTITY_INSERT установлено значение OFF."
Я никогда не устанавливал поле идентичности на что-либо, я думал, что RIA сделает это для меня. Но когда я отлаживаю и смотрю, это имеет 0 для значения. Но, по крайней мере, на этот раз он вызывает мой метод вставки в моем сервисе... Может быть, мне чего-то не хватает в моем процессе, но я действительно мог бы использовать некоторую помощь. Спасибо:)
1 ответ
Вы используете Entity Framework? Если это так, вам нужен атрибут [Key] хотя бы для одного поля в ваших метаданных. Или создайте столбец идентификаторов /PK (int/guid), а затем обновите метаданные.