Как конвертировать 'Uri' в строку при использовании ядра Entity Framework - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу создавать таблицы базы данных, используя ядро ​​Entity Framework из POCO-классов.Когда я пытаюсь добавить новый элемент скаффолда (опция: Razor страниц с использованием Entity Framework (CRUD) в VS), появляется ошибка: «Не найден подходящий конструктор для типа сущности« Uri »

Я узнал, что(среди прочего) Uri должен быть преобразован в String в методе OnModelCreating (в классе, который наследуется от dbContext).

Класс DbContext:

    public class SchoolDbContext : DbContext {
      public DbSet<Student> Students { get; set; }

      protected override void OnModelCreating(ModelBuilder modelBuilder) {
        modelBuilder.Entity<Student>()
        .Property(t => t.Homepage)
        .HasConversion(
        v => v.ToString(),
        v => new Uri(v));
      }
    }

Класс ученика:

    public class Student {
      public int ID { get; set; }
      public Uri Homepage {get; set; }
    }

Я знаю, что метод OnModelCreating вызывается при вводе команды «Начальная миграция добавления».Но поскольку я попытался автоматически реализовать классы CRUD, я не могу ввести команду «Добавить начальную миграцию».Большое спасибо и извините за мой плохой английский ..

Ответы [ 4 ]

1 голос
/ 30 апреля 2019
var uri = new Uri(path);
uri.AbsolutePath();
0 голосов
/ 02 мая 2019

Наконец-то я нашел решение своей проблемы: хотя я и написал класс SchoolDbContext, который унаследован от DbContext, я не указывал этот конкретный класс в качестве контекста для доступа к моей базе данных.При создании нового элемента скаффолда (Razor-страниц с использованием Entity Framework (CRUD)) вас просят указать класс модели и класс контекста.Вместо создания нового контекста (который я делал все время) с помощью кнопки «+», мне пришлось указать свой класс SchoolDbContext.

0 голосов
/ 30 апреля 2019

если вам нужно преобразовать Uri в строку, используйте свойство Uri Uri.AbsolutePath, которое вернет вам преобразование строки Uri.например:

  public class Student
   {
       public int ID { get; set; }
       public Uri Homepage { get; set; }
   }
   Student s= new Student();
   string myUri = s.Homepage.AbsolutePath;
or

    public class SchoolDbContext : DbContext {
    public DbSet<Student> Students { get; set; }

          protected override void OnModelCreating(ModelBuilder modelBuilder) {
            modelBuilder.Entity<Student>()
            .Property(t => t.Homepage.AbsolutePath);
          }
        }
0 голосов
/ 30 апреля 2019

Если я правильно понимаю, что вы спрашиваете, вы можете попробовать написать:

Path.Combine(Homepage.Segments);

, которые создают строку, представляющую путь Uri.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...