C# 实体框架拆分表删除

C# 实体框架拆分表删除,c#,sql,entity-framework,entity-framework-4,self-tracking-entities,C#,Sql,Entity Framework,Entity Framework 4,Self Tracking Entities,我正在使用EF 4 STE对附件对象进行建模。附件包含名称、说明、日期和最重要的数据(字节[])。为了优化加载,我不想检索数据属性,除非它是绝对必要的,即当用户从客户端单击Download时 为了遵循这种方法,我使用了所描述的表拆分技术。我将我的附件表拆分为附件(名称、说明、日期)和附件数据(数据)。在我的EF模型中是一对一的关系。一切都很好,直到我尝试删除一个附件,而不删除AttachmentData(即Attachment.AttachmentData==null)。我得到以下例外情况: 遇

我正在使用EF 4 STE对附件对象进行建模。附件包含名称、说明、日期和最重要的数据(
字节[]
)。为了优化加载,我不想检索数据属性,除非它是绝对必要的,即当用户从客户端单击
Download

为了遵循这种方法,我使用了所描述的表拆分技术。我将我的附件表拆分为附件(名称、说明、日期)和附件数据(数据)。在我的EF模型中是一对一的关系。一切都很好,直到我尝试删除一个附件,而不删除AttachmentData(即
Attachment.AttachmentData==null
)。我得到以下例外情况:

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

我看到了一个,但我似乎无法使它与STE和
ApplyChanges
扩展方法一起工作

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

我尝试了一个简单的deletesql函数,并将其映射到两个实体,这两个实体实际上都起作用了;然而,它打破了插入。我似乎无法将所有属性的插入函数映射到这两个实体

我能试试其他的选择吗?附件和AttachmentData之间的关系可以是可选的吗?当我将其设置为1到0+时,我得到一个映射错误,表示它们的主键可能发生冲突

欢迎任何建议


谢谢

解决方案类似于链接问题,但您必须使用STEs的特定功能-
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();

非常感谢您的回复!很好!这让我深感困惑:既然实体存储在同一个表中,为什么EF不能弄清楚,删除其中一个实体也会删除另一个实体?你为什么要加载它?@FyodorSoikin:我想是因为还没有人实现这个功能。