在一对多关系中删除实体的正确方法

时间:2013-08-31 16:55:47

标签: javascript entity-framework breeze

我有亲子关系(一对多)。我能够创建子项但删除失败。我创建了一个孩子,保存它,但是当我删除时,我得到:

A foreign key value cannot be inserted because a corresponding primary key value 
does not exist. [ Foreign key constraint name = FK_dbo.Children_dbo.Parents_ParentId ]

我注意到当删除被发送到服务器时,孩子的parentid为0,实体状态为“modified”。我希望这会被“删除”。

相关视图模型部分:

function queryFailed(error) {
  console.log('Query failed: ' + error.message);
}
function save() {
  dataservice.saveChanges().fail(queryFailed);
}
function deleteChild(child) {
  parent().children.remove(child);
}
function addChild() {
  dataservice.createChild(parent);
}

HTML:

<section data-bind="with: parent">
  <div data-bind="foreach: children">
    <div>
      <select name="propertyOne" 
        data-bind="options: propertyOneOptions, value: propertyOne, optionsText: 'description', optionsCaption: 'Select a Property'">
      </select>
      <button data-bind="click: $root.deleteChild">Delete Child</button>
    </div>
  </div>
  <button data-bind="click: $root.addChild">Add Child</button>
</section>
<button data-bind="click: save">Save</button>

数据模型:

public class Parent
{
  public Parent()
  {
    Children = new List<Child>();
  }
  [Key]
  public int Id { get; set; }

  public String OtherProperty { get; set; }

  public IList<Child> Children { get; set; }

}
public class Child
{
  [Key]
  public int Id { get; set; }

  public int ParentId { get; set; }

  [ForeignKey("ParentId")]
  public Parent Parent { get; set; }
}

1 个答案:

答案 0 :(得分:8)

确实,我没有正确删除实体。我应该:

child.entityAspect.setDeleted();

我以为我已经正确阅读了change tracking文件,但实际上我没有。