将实体插入到带有RIA的EntityCollection中

时间:2010-08-14 00:41:17

标签: silverlight service ria add entitycollection

我已经建立了一对多关系。 (例如,有许多电话号码的人)。在我的获取查询中,我有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。但至少这次它在我的服务中调用了我的插入方法......也许我错过了我的过程中的一些重要内容,但我真的可以使用一些帮助。谢谢:)

1 个答案:

答案 0 :(得分:0)

您使用的是实体框架吗?如果是这样,您需要元数据中至少一个字段的[Key]属性。或者创建一个identity / PK列(int / guid),然后更新元数据。