延迟加载Entity Framework v.1中的昂贵字段

时间:2009-08-26 21:55:52

标签: .net entity-framework lazy-loading

在网上打猎之后,我以为我想出了解决办法,我似乎又打了另一个砖墙。

我的数据库中有一张表:照片;包含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延迟加载昂贵的田地)
  4. 我最终得到了一个实体映射,如下所示:

    Entity Diagram

    并且,根据上面的链接,我修改了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)在PhotosPhotoDetails中。通过映射的列顺序不会保留。

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

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

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

    感谢。

1 个答案:

答案 0 :(得分:2)

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

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