实体框架拆分表删除

时间:2011-11-17 16:46:27

标签: c# sql entity-framework entity-framework-4 self-tracking-entities

我正在使用EF 4 STE来为Attachment对象建模。 附件包含名称,说明,日期,最重要的是数据(byte[])。为了优化加载,我不希望在绝对必要之前检索Data属性,即当用户从客户端点击Download时。

为了遵循这种方法,我使用了here描述的表拆分技术。我将附件表格拆分为附件(名称,说明,日期)和附件数据(数据)。这是我EF模型中的一对一关系。在我尝试删除没有 AttachmentData 附件(即attachment.AttachmentData == null)之前,一切正常。我得到以下异常:

  

遇到无效数据。缺少必需的关系。检查StateEntries以确定约束违规的来源。

我看到similar post,但我似乎无法使用STE和ApplyChanges扩展方法。

现在我的数据访问代码很简单:我调用上下文ApplyChanges()后跟SaveChanges()

我尝试过一个简单的删除SQL函数并将其映射到两个实体并且实际工作;但它打破了插入物。我似乎无法将所有属性的插入函数映射到两个实体。

我可以尝试其他一些选项吗? Attachment和AttachmentData之间的关系可以是可选的吗?当我将其设置为1到0+时,我得到一个映射错误,指出Their primary keys may collide

对任何建议持开放态度。

谢谢!

1 个答案:

答案 0 :(得分:6)

解决方案类似于链接问题,但您必须使用STE的特定功能 - ApplyChanges

context.Attachments.ApplyChanges(att);
if (context.ObjectStateManager.GetObjectStateEntry(att).State == EntityState.Deleted)
{
    var data = new AttachmentData() {Id = att.Id};
    context.AttachmentDataSet.Attach(data);
    context.AttachmentDataSet.DeleteObject(data);
}
context.SaveChanges();