簡體   English   中英

使用Entity Framework Fluent Api映射System.Uri

[英]Map System.Uri using Entity Framework Fluent Api

非常簡單的問題。 我有一個具有System.Uri類型屬性的模型。 Uri沒有默認的無參數構造函數,也沒有ID字段。 有沒有辦法覆蓋我的模型生成,以自定義的方式將其存儲在數據庫中(例如,只是作為一個string )? 在NHibernate中,我之前通過實現IUserType實現了這IUserType ,但我在CodeFirst中找不到類似的機制。

顯然,我可以創建一個使用Uri的自定義類型並公開常規的可映射屬性和構造函數,我只是好奇是否有任何方法來映射這個系統類型,這樣我就不必像這樣做一個包裝器。

這是一個非常古老的問題,但我今天也遇到了同樣的問題。 使用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());
    }
}

EF不支持NH等自定義類型映射。

特別是對於System.Uri,我使用包裝器屬性並將實際值映射為字符串; 沒那么糟糕。

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

但是,您可以使用數據注釋並將URL屬性歸屬如下:

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

這將告訴一些服務,這應該顯示和驗證為URL(例如,ASP.NET和Silverlight內置支持它)。

試試這個..

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

確保添加Column Attribute所需的引用

using System.ComponentModel.DataAnnotations;

希望有幫助......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM