繁体   English   中英

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

[英]Using Entity Framework, how do I specify a sort on a navagation property?

我有两个表:[类别],[项目]。 它们通过连接表:[CategoryAndItem]连接。 它具有两个主键字段:[CategoryKey],[ItemKey]。 外键适当地存在,并且Entity毫不费力地将其引入并创建连接实体对象的正确导航属性。

基本上,每个类别可以具有多个项目,并且项目可以属于多个类别。 问题在于,按类别指定了项目的顺序,因此特定项目可能在一个类别中排在第三,而在另一个类别中排在第五。

过去,我在联接表中添加了一个[Sequence]字段,并修改了存储过程以对其进行处理。 但是由于Entity正在替换我的存储过程,因此我需要弄清楚如何使Entity处理序列。

有什么建议么?

第一种选择:使用存储过程。 您仍然可以将存储过程与Entity Framework一起使用,并且EF4使其比原始EF3实施更容易。

第二种选择:手动处理。 您会在插入时知道CategoryAndItem记录应获得什么序列顺序吗? 如果是这样,那可能就像将Entity的Sequence属性设置为1 + (From item as CategoryAndItem in model.CategoryAndItem select item.Sequence where item.Category = ... ).Max()一样简单1 + (From item as CategoryAndItem in model.CategoryAndItem select item.Sequence where item.Category = ... ).Max() (VB代码,对不起:))。

EntityCollection是无序的。 您可以在这里阅读有关内容。 当您需要有序列表时,解决方法是投影到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.
        };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM