2013-08-15 4 views
1

Рассмотрим следующие таблицы базы данных:Сортировка свойства навигации в Entity Framework

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, 
) 

Со следующими Pocos:

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?

Я использую первую модель базы данных.

Редактировать: Я понял, что могу просто добавить свойство OrderedInputs для Step, которое возвращает StepInputs.OrderBy (...), который решил немедленную проблему, хотя я не уверен в значениях производительности. Мне все еще интересно узнать, есть ли способ установить это в EF без использования специального свойства.

ответ

1

Ни в коем случае ...! Я думаю, что у вас есть два трюка:

1) Создание статического DbContext, и в первый раз, загружать данные, необходимые в память с помощью .load() и выполнения вашего заказа, а затем просто использовать данные в памяти в Local собственности от вашего dbctx.<DbSet> s - уродливый способ и, скорее всего, вас не устраивает ...

2) Создайте хранимую процедуру для извлечения ваших данных и выполнения заказа в базе данных и сопоставьте это sp с сущностью в вашей модели.

Смежные вопросы