【问题标题】:Delay loading expensive fields in Entity Framework v.1在实体框架 v.1 中延迟加载昂贵的字段
【发布时间】:2009-08-26 21:55:51
【问题描述】:

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

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

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

我看过以下帖子:

  1. How to split a data table?
  2. “Table Splitting”: Mapping multiple entity types to the same table.
  3. 第 7 章:Entity Framework Learning Guide(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 中这一切都会变得容易得多,但这不在这里,而且可能要在它发布后一段时间我的主机开始提供将它安装在某个地方。

谢谢。

【问题讨论】:

    标签: .net entity-framework lazy-loading


    【解决方案1】:

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

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

    【讨论】:

    • “主键的不同字段”是指给它一个不同的名称,但使用相同的底层数据库列,还是向数据库添加一个新列,然后使用它?
    • 遗憾的是,我现在尝试了这两个选项:重命名实体上的标量属性,这会导致相同的错误消息(不保留通过映射的列顺序),添加新的列到数据库,在两个实体中公开它,并将其用作键导致错误,如“您没有在 PhotoDetails 中使用实体键 PhotoID”。我担心我将不得不重新设计实时数据库 - 是的 LinqPad,用光标向下;)
    • 我的意思是在数据库中添加一个新列并使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多