我已经建立了一对多的关系。(例如,一个拥有许多电话号码的人)。在我的 get 查询中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();
:
Message = "提交操作验证失败。请检查 EntitiesInError 中每个实体的 Entity.ValidationErrors 以获取更多信息。"
好吧,所以我这样做了,果然有一个错误,但我不太明白为什么会有。我在数据库中有一个不可为空的字段用于 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 添加我的对象并调用它自己的插入方法。所以我一开始就使用它,只是在 UI 中设置属性,然后它会给我这个错误:
Message = “提交操作失败。更新条目时出错。有关详细信息,请参阅内部异常。内部异常消息:当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'iset_trkr_writeback' 中插入标识列的显式值。”
我从来没有将身份字段设置为任何东西,我认为 RIA 会为我做这件事。但是当我调试并查看时,它的值为 0。但至少这一次它在我的服务中调用了我的插入方法......也许我的过程缺少了一些重要的东西,但我真的可以使用一些帮助。谢谢:)