entity framework拆分表删除
我正在使用EF 4 STE来建模一个Attachment对象。 附件包含名称,描述,日期,最重要的是数据( byte[]
)。 为了优化加载,我不希望在绝对必要之前检索Data属性,即当用户从客户端单击Download
。
为了遵循这种方法,我使用了这里描述的表拆分技术。 我将附件表拆分为附件 (名称,描述,日期)和附件数据(数据)。 这是我的EF模型中的一对一关系。 一切都很好,直到我尝试删除没有AttachmentData的附件 (即attachment.AttachmentData == null
)。 我得到以下exception:
遇到无效数据。 缺少必需的关系。 检查StateEntries以确定约束违规的来源。
我看到了类似的post ,但我似乎无法使用STE和ApplyChanges
扩展方法。
现在我的数据访问代码很简单:我调用context的ApplyChanges()
然后调用SaveChanges()
。
我尝试了一个简单的删除SQL函数,并将其映射到两个实体,并实际工作; 但它打破了插入物。 我似乎无法将所有属性的插入函数映射到两个实体。
关于我可以尝试的其他一些选择的任何想法? Attachment和AttachmentData之间的关系可以是可选的吗? 当我将它设置为1到0+时,我得到一个映射错误,指出Their primary keys may collide
。
对任何建议开放。
谢谢!
解决方案与链接问题类似,但您必须使用STE的特定function – 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();