使用Entity Framework,如何在导航属性上指定排序?

时间:2010-04-21 02:20:51

标签: c# database entity-framework

我有两个表:[类别],[项目]。它们通过连接表连接:[CategoryAndItem]。它有两个主要关键字段:[CategoryKey],[ItemKey]。外键存在得恰当,实体可以将其拉入并创建连接实体对象的正确导航属性。

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

过去,我在连接表中添加了[Sequence]字段,并修改了存储过程来处理它。但是由于Entity正在替换我的存储过程,我需要弄清楚如何让Entity处理序列。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

第一个选项:使用存储过程。您仍然可以将存储过程与实体框架和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代码,对不起:))。

答案 1 :(得分:0)

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.
        };