0

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

4

1 回答 1

0

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

于 2010-08-16T18:36:54.000 回答