Есть такой класс в модели
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public Uri WebPage { get; set; }
}
Я хочу создать БД с помощью EF6 и подхода CodeFirst вот так. Соответственно просто обращаюсь к БД в следующим образом:
using (UserContext db = new UserContext())
{
// создаем два объекта User
Uri uri1 = new Uri(@"http:\\www.egg.egg");
Uri uri2 = new Uri(@"http:\\www.foo.egg");
User user1 = new User { Name = "Tom", WebPage = uri1 }; // Age = 33 };
User user2 = new User { Name = "Sam", WebPage = uri2 };//Age = 26 };
// добавляем их в бд
db.Users.Add(user1);
db.Users.Add(user2);
db.SaveChanges();
}
Но тип Uri не транслируется в типы MsSql напрямую и возникает исключение:
error 3004: Problem in mapping fragments starting at line 6:No mapping specified for properties User.WebPage in Set Users. An Entity with Key (PK) will not round-trip when:
Вопрос - как это сделать правильно? Буду благодарен за ссылку на учебный материал.
Когда тип не транслируется в sql напрямую - то самое простое - сделать два свойства, одно [NotMapped]
с нужным вам типом (Uri в данном случае), а второе - тип, про который знает база (обычно - строка), который будете сохранять в бд.
Примерно как здесь: Коллекция примитивов в Entity Framework
У вас так:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
[NotMapped]
public Uri WebPage
{
get
{
return new Uri(this.WebPageDb);
}
set
{
this.WebPageDb = this.ToString();
}
}
[Column("WebPage")]
public string WebPageDb { get; set; }
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как перевести IPEndPoint в Int? Хочу определять пользователя при подключении к серверу и заносить в массив, название ячейки как раз будет равно...
Программа заходит на сайт, ищет кнопку авторизации, вводит логин и пароль, нажимает Enter, а далее необходимо дождаться, пока загрузится новая...