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