找不到实体类型'Uri'的合适构造函数。

问题描述 投票:1回答:2

我有这个型号:

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','relativeUri','dontEscape','uriString','uriKind','baseUri',' relativeUri','serializationInfo','streamingContext','baseUri','relativeUri','flags','uriParser','uri'。

asp.net entity-framework asp.net-core
2个回答
1
投票

您不能将Uri直接保存到数据库,因为没有相关的SQL类型。您需要使用字符串。如果您正在使用视图模型(您应该如此),您的视图模型可以具有Uri,然后您只需要在映射到实际实体类型期间获取字符串表示。

您还可以简单地使用EF Core的价值转换(2.1+版本)。有关更多详细信息,请参阅docs。基本上,在您的流畅配置中:

.HasConversion(
    v => v.ToString(),
    v => new Uri(v));

0
投票

可以将值转换添加到DbContext以转换在读取或写入数据库时​​使用的类型。这是通过覆盖OnModelCreating方法完成的。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Book>()
        .Property(e => e.Link)
        .HasConversion(v => v.ToString(), v => new Uri(v));
}
© www.soinside.com 2019 - 2024. All rights reserved.