实体框架中的级联删除和分离对象?

时间:2011-06-01 10:31:10

标签: .net entity-framework .net-4.0 entity-framework-4 poco

以下是Entity Framework型号的一部分

db model

基本上我有项目,可以有多个预览,每个预览都有一个缩略图(存储在 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 - 数据库中的外键应该由概念模型中的关联支持。

这种情况有不错的方法吗?

0 个答案:

没有答案