以下是Entity Framework型号的一部分
基本上我有项目,可以有多个预览,每个预览都有一个缩略图(存储在 blob字段 Data 中> PreviewThumbnail )。
我正在使用自我跟踪POCO代理和存储库模式。 外键约束在数据库和实体框架模型中都是强制执行的。 现在,因为 PreviewThumbnail 对象包含字节数组,我不希望实体框架跟踪它们,我只是希望能够加载bite [?]数组并对其进行处理并将其处理掉一会儿。这是相关的代码:
public ObjectSet<PreviewThumbnail> PreviewThumbnails {
get {
if (mPreviewsThumbnailsSet == null) {
mPreviewsThumbnailsSet = CreateObjectSet<PreviewThumbnail>("PreviewThumbnails");
mPreviewsThumbnailsSet.MergeOption = MergeOption.NoTracking;
}
return mPreviewsThumbnailsSet;
}
}
这就是我获取给定预览的字节的方式:
public byte[] LoadImagePreviewThumbnail(Preview preview) {
var thumb = this.ObjectContext.PreviewThumbnails.First(t => t.Preview.ID == preview.ID);
return thumb.Data;
}
现在,在设置场景时,我正在尝试让删除级联工作 - 如果删除项,其所有预览也应该是与 PreviewThumbnails 一起删除。 听起来不错,但是当删除项时,会抛出以下异常:
来自'FK_PreviewThumbnails_0'AssociationSet的关系处于'已删除'状态。给定多重约束,相应的'PreviewThumbnails'也必须处于'已删除'状态。
如果从'FK_PreviewThumbnails_0'中删除Cascade OnDelete操作,则会引发相同的异常。
更令人惊讶的是(至少对我来说),当我更改 PreviewThumbnail 结尾的多重性(意味着预览没有缩略图,当然这是无效的)时,完全相同的异常是抛出。
我尝试的最后一件事是彻底删除框架模型中的预览和 PreviewThumbnail 之间的关联(毕竟我可以不使用它),但这不是valid - 数据库中的外键应该由概念模型中的关联支持。
这种情况有不错的方法吗?