1 対多の関係が設定されています。(例: 多くの電話番号を持つ人)。私のgetクエリthis.ObjectContext.Person.Include("PhoneNumbers")
では、生成されたMetaDataを含め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();
。
Message = "送信操作の検証に失敗しました。詳細については、EntitiesInError 内の各エンティティの Entity.ValidationErrors を調べてください。"
わかりました、それで、確かにエラーがありますが、なぜそこにあるのかよくわかりません。私はそれを作成してentityCollectionに追加したときに設定しなかったlast_modified_byフィールドのデータベースにnull不可のフィールドを持っています。これが原因だと思いますが、私の質問はなぜ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 メソッドを呼び出すようなものです。そのため、最初はそれを使用して、UI でプロパティを設定しただけで、次のエラーが発生しました。
Message = "送信操作に失敗しました。エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。内部例外メッセージ: IDENTITY_INSERT が OFF に設定されている場合、テーブル 'iset_trkr_writeback' の ID 列に明示的な値を挿入できません。"
私は ID フィールドを何も設定しませんでした。RIA がこれをやってくれると思っていました。しかし、デバッグして見てみると、値が 0 になっています。しかし、少なくとも今回は、サービスで挿入メソッドを呼び出します...プロセスに大きな何かが欠けているのかもしれませんが、本当に助けが必要です。ありがとう:)