2009-08-26 94 views
4

狩猎周围净,以为我会拿出解决方案之后,我似乎已经触及砖墙。延迟加载实体框架中第1节昂贵领域

我在我的数据库中有一张桌子:照片;包含用于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延迟加载)

我结束与一个实体映射看起来像这样:

Entity Diagram http://www.doodle.co.uk//UserFiles/Image/EF-LazyLoad.png

而且,按照上面的联系,我修改了EDMX文件包括以下引用约束:

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

模型验证,但不建立 - 因为与标签的问题映射我认为:

错误3019:映射片段中的第871,892行开始的问题:组合键列的映射不正确。外键约束 'FK_siteContent_TagsPhotos_siteContent_Photos' 从表siteContent_TagsPhotos(PHOTOID)表siteContent_Photos(PHOTOID):表siteContent_TagsPhotos列(PHOTOID)被映射到被映射到属性表siteContent_Photos在siteContent_TagsPhotos和列(PHOTOID)性能(PHOTOID)(PHOTOID)在PhotosPhotoDetails中。通过映射的列顺序不会被保留。

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

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

我知道,这都将是在.NET 4中容易得多,但是这不是在这里,它很可能将是一个,而它的发布,我的主机开始提供某处安装它之后。

谢谢。

回答

2

我已经打了同样的问题,虽然我还没有找到一个解决方案3.5SP1我没有证实这个错误与EF 4.0消失。

实际上,对于你潜在的解决方法是使用一个不同的领域为您PhotoDetails实体的主键。

+0

“主键的不同字段”,你的意思是给它一个不同的名字,但使用相同的底层数据库列,或添加一个新的列到数据库,并使用它? – 2009-09-04 05:59:07

+0

不幸的是,我现在已经尝试了两种选择:重命名实体上的标量属性,这会导致相同的错误消息(通过映射的列的顺序不会保留),向数据库添加一个新列,从而暴露在这两个实体中,并使用它作为关键所引起的错误,沿着“你没有在PhotoDetails中使用实体关键码PhotoID”这一行。我担心我将不得不修改实时数据库 - 对LinqPad有好处,用游标下来;) – 2009-09-04 19:37:51

+0

我的意思是在数据库中添加一个新列并使用它。 – 2009-09-04 19:40:08