代码之家  ›  专栏  ›  技术社区  ›  Jaguir

使用实体框架,如何在navagation属性上指定排序?

  •  0
  • Jaguir  · 技术社区  · 16 年前

    基本上每个类别可以有多个项目,项目可以在多个类别。问题是,项目的顺序是按类别指定的,因此某个特定项目可能在一个类别中排名第三,但在另一个类别中排名第五。

    在过去,我向联接表添加了一个[Sequence]字段,并修改了存储过程来处理它。但由于实体正在替换我的存储过程,所以我需要弄清楚如何使实体处理序列。

    有什么建议吗?

    2 回复  |  直到 16 年前
        1
  •  0
  •   Craig Stuntz    16 年前

    EntityCollection 它们是无序的。你可以看看这个 here . 当您需要一个有序列表时,解决方法是投影到POCO表示模型或DTO上:

    var q = from c in Context.Categories
            select new CategoryPresentation
            {
                Key = c.Key,
                Items = from ci in c.CategoryAndItems
                        orderby ci.SequenceNo
                        select new ItemPresentation
                        {
                            Key = ci.Item.Key,
                            // etc.
                        },
                 // etc.
            };
    
        2
  •  0
  •   echo    16 年前

    第一种选择:使用存储过程。您仍然可以在实体框架中使用存储过程,并且 EF4 makes this easier than the original EF3 implementation did.

    第二种选择:手动处理。你知道在插入时CategoryAndItem记录应该得到什么顺序吗?如果是这样的话,就可以简单地将实体的Sequence属性设置为 1 + (From item as CategoryAndItem in model.CategoryAndItem select item.Sequence where item.Category = ... ).Max() . (VB代码,对不起:))。