考虑以下数据库表:
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中设置它而不必使用自定义属性。
答案 0 :(得分:1)
没办法......!我认为你有两个技巧:
1)创建一个静态dbcontext,并且第一次使用.load()
将所需数据加载到内存中并执行排序,然后只使用Local
属性中的内存数据你的dbctx.<DbSet>
- 一种丑陋的方式,很可能不满足你...
2)创建一个存储过程来检索数据并在数据库中执行排序,并将该sp映射到模型中的实体。