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

4

在网络上搜索并认为我找到了解决方案后,我似乎又遇到了问题。

我的数据库中有一张表:Photos;包含PhotoID、Caption、Ordering和四组二进制数据:原始、大型、中型和小型(是的,它是基于旧的ASP.NET starter kit进行的各种修复等)。

我正在将某些内容从L2S移动到Entity Framework,以获得一些优势-这样我就不再需要通过PhotosTags属性获取附加到照片的标签列表,但我正在寻找一种延迟加载二进制数据的方法-大多数情况下,我只需要标题、标签和ID,然后当用户实际查看图像时,我将其传递给另一个区域以获取二进制数据。

我查看了以下帖子:

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

最终,我得到了这样一个实体映射:

实体图

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

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

模型验证通过,但无法构建 - 我认为是由于标签映射的问题:

错误3019:从表siteContent_TagsPhotos(PhotoID)到表siteContent_Photos(PhotoID)的外键约束“FK_siteContent_TagsPhotos_siteContent_Photos”:在起始行为871、892的映射片段中存在问题。复合键列的映射不正确。在表siteContent_TagsPhotos中,列(PhotoID)被映射到siteContent_TagsPhotos中的属性(PhotoID),而在表siteContent_Photos中的列(PhotoID)被映射到PhotosPhotoDetails中的属性(PhotoID)。通过映射的列的顺序未得到保留。

Photos到Tags的关系是通过链接表中的列PhotoID和TagID进行的。

是否有人已经成功地将那些建议或类似的东西与.NET 3.5 SP1中的实体框架一起使用,并且具有像这样的数据结构?或者你能指出我的GoogleFU的限制吗?

我知道在.NET 4中所有这些都会变得更加容易,但那还没有到来,而且在我的主机开始在某个地方安装它之后,它可能会过一段时间才会发布。

谢谢。
1个回答

2
我遇到了相同的问题,虽然我没有找到3.5SP1的解决方案,但我确认这个错误在EF 4.0中消失了。
实际上,你可以尝试在PhotoDetails实体中使用不同的字段作为主键来解决这个问题。

“不同的主键字段”,您是指仅给它一个不同的名称,但使用相同的底层数据库列,还是向数据库添加一个新列并使用它? - Zhaph - Ben Duguid
很遗憾,我现在已经尝试了两种选项:重命名实体上的标量属性,结果导致相同的错误消息(映射中列的顺序未得到保留),向数据库添加一个新列,在两个实体中公开并将其用作键会导致类似于“您没有在PhotoDetails中使用实体键PhotoID”的错误。我担心我将不得不重新设计现有数据库 - LinqPad兴起,游标没落 ;) - Zhaph - Ben Duguid
我是指向数据库添加一个新列并使用它。 - Craig Fisher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接