Entity Framework Code First CTP5: как определить не примитивные типы

Сначала я тестирую CTP5 для кода структуры объектов, и я столкнулся с этой проблемой. У меня есть класс со свойством типа Uri (System.Uri), но похоже, что он не может автоматически определить, как сохранить это, поэтому я получаю сообщение об ошибке, например

Problem in mapping fragments starting at line 23:No mapping specified for properties WebPage.Uri in Set WebPage

Как я могу сказать модели, чтобы сопоставить Uri с varchar, например, с URL-адресом uri??


person Daniel Perez    schedule 09.02.2011    source источник


Ответы (1)


Фактическая модель POCO должна быть привязана к примитивным типам. Вы можете использовать привязку сложного типа, например:

[ComplexType()]
public class UriHelper
{
    public string StringRepresentation {get;set;}
    public Uri ActualUri()
    {
        return new Uri(StringRepresentation);
    }
}

И в вашем фактическом объекте ссылайтесь на этот сложный тип как ссылку Uri, если вам это абсолютно необходимо. Затем ваше сопоставление будет ссылаться на свойство для фактического значения в виде строки. Последний вариант — создать пользовательское сопоставление URI со строкой и наоборот для использования механизмом EF. Однако я бы не советовал этого. Фактическое свойство базы данных имеет тип varchar или nvarchar, а не URI. Таким образом, EF не знает, что такое URI.

person VulgarBinary    schedule 09.02.2011