在Entity Framework中对导航属性进行排序

时间:2013-08-15 16:03:59

标签: sql-server-2008 entity-framework-5

考虑以下数据库表:

CREATE TABLE [dbo].[Step]
(
   [StepId] INT NOT NULL PRIMARY KEY IDENTITY,
   [OrderIndex] INT NOT NULL
)

CREATE TABLE [dbo].[StepInput]
(
   [StepInputId] INT NOT NULL PRIMARY KEY IDENTITY, 
   [StepId] INT NOT NULL, 
   [OrderIndex] INT NOT NULL, 
   CONSTRAINT [FK_StepInput_Step] FOREIGN KEY ([StepId]) REFERENCES [Step]([StepId])  ON DELETE CASCADE, 
)

使用以下POCO:

public class Step
{
   public virtual int StepId { get; set; }
   public virtual ICollection<StepInput> StepInputs { get; set; }
}

public class StepInput
{
   public int StepInputId { get; set; }
   public int StepId { get; set; }
   public virtual int OrderIndex { get; set; }
}

我想通过OrderIndex订购StepInputs。有没有办法设置导航属性,以便它由EF自动排序,这样Step的用户不必每次都调用StepInputs.OrderBy?

我正在使用数据库优先模型。

编辑:我确实意识到我可以向Step添加一个OrderedInputs属性,它返回StepInputs.OrderBy(...),这解决了当前的问题,尽管我不确定性能影响。我仍然很好奇是否有办法在EF中设置它而不必使用自定义属性。

1 个答案:

答案 0 :(得分:1)

没办法......!我认为你有两个技巧:

1)创建一个静态dbcontext,并且第一次使用.load()将所需数据加载到内存中并执行排序,然后只使用Local属性中的内存数据你的dbctx.<DbSet> - 一种丑陋的方式,很可能不满足你...

2)创建一个存储过程来检索数据并在数据库中执行排序,并将该sp映射到模型中的实体。