4

在网上搜寻并认为我会想出解决方案之后,我似乎又碰到了另一堵砖墙。

我的数据库中有一张表:照片;包含 PhotoID、Caption、Ordering 列和四组二进制数据:Original、Large、Medium 和 Small(是的,它基于旧的 ASP.NET 入门工具包并进行了各种修复等)。

我正在从 L2S 迁移到实体框架,因为我似乎从中获得了一些优势 - 所以我不再需要通过 PhotosTags 属性来获取附加到照片的标签列表,但是我正在寻找一种延迟加载二进制数据的方法——大多数时候,我只需要标题、标签和 ID,然后当用户实际查看图像时,我将它们交给另一个区域以获取二进制数据.

我看过以下帖子:

  1. 如何拆分数据表?
  2. “表拆分”:将多个实体类型映射到同一个表。
  3. 第7章:实体框架学习指南(7.1延迟加载昂贵字段)

我最终得到了一个如下所示的实体映射:

实体图

而且,根据上面的链接,我修改了 edmx 文件以包含以下引用约束:

<ReferentialConstraint>
  <Principal Role="Photos">
    <PropertyRef Name="PhotoID" />
  </Principal>
  <Dependent Role="PhotoDetails">
    <PropertyRef Name="PhotoID" />
  </Dependent>
</ReferentialConstraint>

该模型已验证,但未构建 - 因为我认为标签映射存在问题:

错误 3019:从第 871、892 行开始映射片段时出现问题:复合键列的映射不正确。从表 siteContent_TagsPhotos (PhotoID) 到表 siteContent_Photos (PhotoID) 的外键约束“FK_siteContent_TagsPhotos_siteContent_Photos”:表 siteContent_TagsPhotos 中的列 (PhotoID) 映射到 siteContent_TagsPhotos 中的属性 (PhotoID),表 siteContent_Photos 中的列 (PhotoID) 映射到属性 (PhotoID)在照片照片详细信息中。不保留通过映射的列顺序。

从照片到标签的关系是通过一个链接表、列 PhotoID、TagID。

有没有人设法获得这些建议或类似的东西,以使用具有这样的数据结构的 .NET 3.5 SP1 中的实体框架?或者你能指出我的 GoogleFU 的局限性吗?

我知道在 .NET 4 中这一切都会变得容易得多,但这不在这里,而且它可能会在它发布后的一段时间内我的主机开始提供将它安装在某个地方。

谢谢。

4

1 回答 1

2

我遇到了同样的问题,虽然我还没有找到 3.5SP1 的解决方案,但我确实确认了这个错误在 EF 4.0 中消失了。

实际上,一个潜在的解决方法是为 PhotoDetails 实体中的主键使用不同的字段。

于 2009-09-04T05:02:18.317 回答