Модель Entity Framework 4 сначала использует объект денежной стоимости - PullRequest
1 голос
/ 30 марта 2011

Я хочу использовать объект Money value в своем приложении.Я нашел несколько примеров типа данных Money .Но я не могу понять, как использовать их с EF4.Я хотел бы хранить каждую сумму в виде пары Decimal / CurrencyCode (где currencycode - строка - «USD», «SEK» и т. Д.) В базе данных.Я пытался создать complexType, но я не мог заставить это работать.Это возможно?

1 Ответ

1 голос
/ 30 марта 2011

Это должно быть определенно возможно.Ваш сложный тип - это просто пара десятичных и строковых свойств.Это именно то, для чего используется сложный тип.В зависимости от вашего подхода вы должны сделать:

База данных сначала:

Сначала вы определите свою базу данных.Ваша таблица будет содержать столбцы money и varchar, представляющие ваш новый тип.Когда вы обновляете модель EDMX из базы данных, она будет включать ее в качестве скалярных свойств для вашей сущности.Вы должны удалить эти свойства.Затем перейдите в браузер модели и создайте новый сложный тип.Вернитесь к сущности и добавьте комплексное свойство вашего нового комплексного типа.И в конце вы должны перейти к сопоставлению сущностей и сопоставить ваш сложный тип с этими столбцами базы данных.

Вот базовый учебник от MSDN , но по неизвестной причине они не включали такие элементарные деталикак скриншоты. Здесь - это видео с канала 9.

Модель сначала:

Сначала это похоже на базу данных, но вам не нужно иметь дело с созданием и отображением базы данных.Он будет сгенерирован для вас.

Сначала код (EF 4.1):

Вы должны создать отдельный класс для вашего сложного типа и использовать его как свойство в вашей сущности.Вам не нужно отображать его по умолчанию - отображение должно выполняться.Если это не работает, вы можете отобразить полный текст либо с помощью аннотации ComplextTypeAttribute, либо с помощью определения сопоставления в DbModelBuilder.

. Я могу еще больше расширить подход, который вам нужно использовать, если вы предоставите более подробную информацию.

...