我正在進行遷移,但沒有看到繼承者類的屬性。我有下一個模型。在 SomeClass 類中,我有正確顯示的虛擬屬性,但是在類中繼承時,什么都沒有顯示
public class School
{
[Key]
public long Id { get; init; }
[Column(TypeName = "jsonb")]
public SomeClass Parameter1 { get; set; }
}
public class SomeClass
{
public virtual ParameterTypes Type { get; }
}
public enum ParameterTypes
{
None,
Value
}
public class DerivedClass : SomeClass
{
public override ParameterTypes Type => ParameterTypes.Value;
public string Value { get; set; }
}
我添加配置這個模型
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<School>(
builder =>
{
builder.HasKey(h => h.Id);
builder.Property(h => h.Parameter1).HasJsonConversion();
});
}
public static PropertyBuilder<T> HasJsonConversion<T>(this PropertyBuilder<T> propertyBuilder)
where T : class, new()
{
var converter = new ValueConverter<T, string>(
v => JsonSerializer.Serialize(v, null),
v => JsonSerializer.Deserialize<T>(v, null) ?? new T());
var comparer = new ValueComparer<T>(
(l, r) => JsonSerializer.Serialize(l, null) == JsonSerializer.Serialize(r, null),
v => v == null ? 0 : JsonSerializer.Serialize(v, null).GetHashCode(),
v => JsonSerializer.Deserialize<T>(JsonSerializer.Serialize(v, null), null)
);
propertyBuilder.HasConversion(converter);
propertyBuilder.Metadata.SetValueConverter(converter);
propertyBuilder.Metadata.SetValueComparer(comparer);
propertyBuilder.HasColumnType("jsonb");
return propertyBuilder;
}
當我進行遷移時,我將列舉視為一個字串(右),但我沒有看到該屬性DerivedClass.Value
也許問題出在 HasJsonConversion 方法中?
如何從繼承的類中獲取屬性?
uj5u.com熱心網友回復:
var converter = new ValueConverter<T, string>(
v => JsonSerializer.Serialize(v, **v.GetType()**, jsonSerializerOptions),
v => JsonSerializer.Deserialize<T>(v, jsonSerializerOptions));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/446718.html
下一篇:本地資料庫到在線資料庫
