1

考虑以下数据库表:

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

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

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

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

4

1 回答 1

1

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

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

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

于 2013-08-17T10:47:41.573 回答