19

很简单的问题。我有一个模型,它的属性是一种System.Uri类型。 Uris 没有默认的无参数构造函数,也没有 ID 字段。有什么方法可以覆盖我的模型生成,以自定义方式将其存储在数据库中(例如,作为 a string)?在 NHibernate 中,我以前通过实现来完成此操作IUserType,但我在 CodeFirst 中找不到类似的机制。

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

4

4 回答 4

31

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

public class MyEntityDbConfiguration : IEntityTypeConfiguration<MyEntity>
{
    public void Configure(EntityTypeBuilder<MyEntity> 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());
    }
}
于 2018-06-11T13:47:25.953 回答
9

EF 不支持自定义类型映射,例如 NH。

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

于 2011-02-18T12:57:59.763 回答
4

不幸的是,没有直接映射System.UristringEF 的方法。

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

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

这将能够告诉一些服务这应该作为 URL 显示和验证(例如,ASP.NET 和 Silverlight 已经内置了对它的支持)。

于 2015-01-20T04:07:14.383 回答
-1

尝试这样做..

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

确保添加列属性所需的参考

using System.ComponentModel.DataAnnotations;

希望有帮助...

于 2011-02-18T14:18:22.140 回答