我已经建立了一对多关系。 (例如,有许多电话号码的人)。在我的获取查询中,我有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添加我的对象并调用它自己的Insert Method。所以我首先使用它,然后在UI中设置属性,然后它会给我这个错误:
消息=“提交操作失败 更新时出错 条目。查看内部异常 细节。内部异常消息: 无法为其插入显式值 表中的标识列 'iset_trkr_writeback'时 IDENTITY_INSERT设置为OFF。“
我从未将身份字段设置为任何内容,我认为RIA会为我做这件事。但是当我调试并查看时,它的值为0。但至少这次它在我的服务中调用了我的插入方法......也许我错过了我的过程中的一些重要内容,但我真的可以使用一些帮助。谢谢:)
答案 0 :(得分:0)
您使用的是实体框架吗?如果是这样,您需要元数据中至少一个字段的[Key]属性。或者创建一个identity / PK列(int / guid),然后更新元数据。