【问题标题】:Storing custom class property like String via OnModelCreating of DBContext .Net Core通过 DBContext .Net Core 的 OnModelCreating 存储自定义类属性,如 String
【发布时间】:2021-02-05 23:56:03
【问题描述】:

我在 .Net Core 中有两个类

班级Owner

namespace CustomStoreDatabase.Models
{
    public class Owner
    {
        public string OwnerId { get; set; }
        public DateTime MinDateTime { get; set; }
        public DateTime MaxDateTime { get; set; }
        public TimeSpan Interval { get; set; }//store like a double
        public Ownership Ownership { get; set; } //store like a JSON String in the db
    }
}

还有班级Ownership

namespace CustomStoreDatabase.Models
{
    public class Ownership
    {
        public string OwnershipId { get; set; }
        public List<string> TextOutput { get; set; }
        public DateTime DateTime { get; set; }
        public TimeSpan MeanInterval { get; set; }//Store like long ticks, TimeSpan.FromTicks(Int64), TimeSpan.Ticks
    }
}

现在,我想像 String 一样将 Ownership 类和 MeanInterval 像 long 一样存储在数据库中。 我在检查thisthis,但我不明白如何应用它。

protected virtual void OnModelCreating (System.Data.Entity.DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Owner>().Property(x => x.Ownership).HasColumnType("text");
    modelBuilder.Entity<Owner>().Property(x => x.Interval).HasColumnType("float");//store like a double
    //How to do both conversion Ownership to JSON String, 
    //    but MeanInterval (TimeSpan) needs to be converted to long (Ticks) too!
    
}

我知道我需要使用HasConversion()方法,但我不知道具体怎么做!

我将如何实现(或使用)HasConversion(Ownership 到 JSON 字符串和 MeanInterval 到 long)?

【问题讨论】:

    标签: c# sql-server asp.net-core dbcontext ef-model-builder


    【解决方案1】:

    我觉得你可以用这个

            protected override void OnModelCreating(ModelBuilder builder)
            {
                builder.Entity<Owner>()
                    .Property(o => o.Ownership)
                    .HasConversion<string>(o => JsonConvert.SerializeObject(o),
                    db => JsonConvert.DeserializeObject<Ownership>(db));
            }
    

    在这种情况下,您必须使用 Newtonsoft.Json Nuget 包将对象序列化为所有权类的 json 字符串,HasConversion() 方法有一个重载,允许放置 ToFormatter 和 FromFormatter 以避免创建 ValueConverter 对象,检查这个https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions,如果你想了解更多关于这个转化的信息。

    【讨论】:

    • 在平均区间的情况下,您也可以使用相同的策略
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2019-07-31
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多