2014-11-06 2 views
5

Я пытаюсь определить некоторые модели, которые я использую в Entity Framework 6. Я хотел бы использовать записи F #. Если я положил [<CLIMutable>] выше определения записи и воспользуюсь ICollection<'a> для, ну, коллекций. EF отлично работает.Как создать поле виртуальной записи для Entity Framework lazy loading

Я могу хранить и извлекать записи. Однако для EF для ленивой загрузки мне нужно сделать поле записи, содержащее виртуальную коллекцию. Я могу сделать элемент собственности виртуальным, сделав его абстрактным и предоставив значение по умолчанию. Записи не являются классами. Можно ли сделать поле записи виртуальным?

Если я пытаюсь увеличить запись с абстрактным элементом я получаю эту ошибку this declaration element is not permitted in an augmentation

ответ

5

Насколько я знаю, вы не можете определить виртуальный элемент в записи - это имеет смысл, потому что вы не можете наследовать от запись, так зачем вам нужны виртуальные участники.

Но я могу понять, почему это необходимо для Entity Framework. Возможно, имеет смысл иметь что-то вроде атрибута CliVirtual, сродни CliMutable (особенно, если это случается часто). Не стесняйтесь предлагать это на F# uservoice page!

Так что, я думаю, лучший вариантом является использование обычного класса с виртуальным авто Реализуемых свойств (который выглядит значительно уродливее):

type A() = 
    abstract member Id: int with get, set 
    default val Id = 123 with get, set 

или, возможно, увидеть, если некоторые из других провайдеров типа SQL для F # Побуждает вы делаете то же самое более красиво!

+1

спасибо. Предложили. http://fslang.uservoice.com/forums/245727-f-language/suggestions/6672675-an-clivirtual-attribute – Remko

+0

Я проголосовал за это. –

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