如何解决通过 DBContext .Net Core 的 OnModelCreating 存储自定义类属性,如 String
我在 .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 类,像 Long 一样在数据库中存储 MeanInterval。 我正在检查 this 和 this,但我不明白如何应用它。
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)?
解决方法
我认为你可以使用这个
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 包将对象序列化为 Ownership 类的 json 字符串,HasConversion() 方法有一个重载,允许放置 ToFormatter 和 FromFormatter 以避免创建 ValueConverter 对象,请检查如果您想了解有关此转化的更多信息,请访问 this。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。