使用Entity Framework Fluent Api映射System.Uri

非常简单的问题。 我有一个具有System.Uri类型属性的模型。 Uri没有默认的无参数构造函数,也没有ID字段。 有没有办法覆盖我的模型生成以自定义方式将其存储在数据库中(例如,只是作为string )? 在NHibernate中,我之前通过实现IUserType实现了这IUserType ,但我在CodeFirst中找不到类似的机制。

显然,我可以创建一个自定义类型,在引擎盖下使用Uri并公开常规的可映射属性和构造函数,我只是好奇是否有任何方法来映射这个系统类型,这样我就不必像这样做一个包装器。

EF不支持NH等自定义类型映射。

特别是对于System.Uri,我使用包装器属性并将实际值映射为字符串; 没那么糟糕。

这是一个非常古老的问题,但我今天也遇到了同样的问题。 使用Entity Framework Core 2.1,您可以设置值转换 :

 public class MyEntityDbConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.Property(e => e.UriField) .HasConversion(v => v.ToString(), v => new Uri(v)); } } public class MyDbContext : DbContext { protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfiguration(new MyEntityDbConfiguration()); } } 

不幸的是,没有直接的方法将System.Uri映射到EF的string

但是,您可以使用数据注释并将URL属性归属如下:

 [DataType(DataType.Url)] public string Link { get; set; } 

这将告诉一些服务,这应该显示和validation为URL(例如,ASP.NET和Silverlight内置支持它)。

试试这个..

 [Column(Name="MyUri", TypeName="string")] public Uri MyUri 

确保添加Column Attribute所需的引用

 using System.ComponentModel.DataAnnotations; 

希望有帮助……