我有这个型号:
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'。
您不能将Uri
直接保存到数据库,因为没有相关的SQL类型。您需要使用字符串。如果您正在使用视图模型(您应该如此),您的视图模型可以具有Uri
,然后您只需要在映射到实际实体类型期间获取字符串表示。
您还可以简单地使用EF Core的价值转换(2.1+版本)。有关更多详细信息,请参阅docs。基本上,在您的流畅配置中:
.HasConversion(
v => v.ToString(),
v => new Uri(v));
可以将值转换添加到DbContext
以转换在读取或写入数据库时使用的类型。这是通过覆盖OnModelCreating
方法完成的。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Book>()
.Property(e => e.Link)
.HasConversion(v => v.ToString(), v => new Uri(v));
}