Не найдено подходящего конструктора для типа сущности 'Uri'. - PullRequest
0 голосов
/ 24 октября 2018

У меня есть эта модель:

public class Book
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Uri Link { get; set; }
}

Я добавил ее к fluent-api, используя следующий код:

 builder.Entity<Book>(entity => {
     entity.HasKey(b => b.Id);
 });

при запуске:

add-migration InitialMigration -context MyAppContext

тогда я получаю:

Не найдено подходящего конструктора для типа сущности 'Uri'.Следующие параметры не могут быть привязаны к свойствам сущности: «uriString», «uriString», «dontEscape», «baseUri», «lativeUri »,« dontEscape »,« uriString »,« uriKind »,« baseUri »,«lativeUri ',' serializationInfo ',' streamingContext ',' baseUri ','lativeUri', 'flags', 'uriParser', 'uri'.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Преобразование значения может быть добавлено к вашему DbContext для преобразования типа, используемого при чтении или записи в базу данных.Это делается путем переопределения метода OnModelCreating.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Book>()
        .Property(e => e.Link)
        .HasConversion(v => v.ToString(), v => new Uri(v));
}
0 голосов
/ 24 октября 2018

Вы не можете сохранить Uri непосредственно в базе данных, так как для этого нет связанного типа SQL.Вам нужно использовать строку вместо.Если вы используете модель представления (как и должно быть), ваша модель представления может иметь Uri, и тогда вам просто нужно получить строковое представление во время сопоставления с вашим фактическим типом сущности.

Вы также можете просто использовать преобразование значений EF Core (доступно в версии 2.1+).См. документы для более подробной информации.По сути, в вашем свободном конфиге:

.HasConversion(
    v => v.ToString(),
    v => new Uri(v));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...