实体框架拆分表删除

Joh*_*ell 13 c# sql entity-framework entity-framework-4 self-tracking-entities

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

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

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

我看到了类似的帖子,但我似乎无法使用STE和ApplyChanges扩展方法.

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

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

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

对任何建议开放.

谢谢!

Lad*_*nka 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();
Run Code Online (Sandbox Code Playgroud)