【问题标题】:Map System.Uri using Entity Framework Fluent Api使用实体框架 Fluent Api 映射 System.Uri
【发布时间】:2011-06-29 13:13:40
【问题描述】:

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

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

【问题讨论】:

    标签: c# entity-framework ef-code-first ef-fluent-api


    【解决方案1】:

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

    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());
        }
    }
    

    【讨论】:

      【解决方案2】:

      EF 不支持像 NH 这样的自定义类型映射。

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

      【讨论】:

      • 是的,我最终做的只是使用一个字符串,然后做一个数据类型验证属性。
      • 我认为他们在 6,而不是 5 中得到了支持。
      • 你能提供一个例子或代码sn-p来澄清一下吗?
      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

        尝试这样做..

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

        确保添加列属性所需的引用

        using System.ComponentModel.DataAnnotations;
        

        希望对您有所帮助...

        【讨论】:

        • 只是想确保我指的是 EF Code First 的 CTP5
        • 不高兴,这不起作用。我仍然收到“实体不会往返”错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        相关资源
        最近更新 更多