asp.net-core - 字符串数组为空 ASP.NET Core Entity Framework
问题描述
我有一个类,如下所示:
public abstract class TankModel
{
protected static readonly char delimiter = ',';
protected string _destinations = "";
[Key]
public int ID { get; set; }
[NotMapped]
public String[] Destinations
{
get
{
return _destinations.Split(delimiter);
}
set
{
_destinations = String.Join($"{delimiter}", value);
}
[..........................]
}
}
public class NormalTank : TankModel
{
public double VolumeTotal { get; set; }
[.........]
}
我的 OnModelCreating 方法包含:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TankModel>().Property<string>("Outputs").HasField("_destinations");
modelBuilder.Entity<TankModel>().ToTable("Tanks");
modelBuilder.Ignore<TankModel>();
modelBuilder.Entity<NormalTank>().HasBaseType<TankModel>();
[..................]
}
当我显示 NormalTank 行时,Destinations 列是空的。
我试图在不继承的情况下显示数据,然后 Destinations 列具有正确的值。我怀疑这modelBuilder.Ignore<TankModel>();
会导致这个问题,但如果没有这个属性,我不会构建迁移。
几个小时以来,我一直在与这个问题作斗争,但我没有看到任何解决方案。
如何在我的数据库中保存目的地?
解决方案
如果您使用的是 EF Core 2.1 或更高版本,则可以利用自定义ValueConverter
.
例如对于以下课程:
public class Example
{
public Example() { Values = new List<string>(); }
public ICollection<string> Values { get; set; }
}
您可以简单地在您的DbContext
:
modelBuilder.Entity<Example>(b => b.Property(x => x.Values)
.HasConversion(new StringCollectionToStringConverter()));
创建了一个转换器类,如下所示:
public class StringCollectionToStringConverter : ValueConverter<ICollection<string>, string>
{
private static readonly Expression<Func<string, ICollection<string>>> ToListValue
= str => str.Split('|', StringSplitOptions.RemoveEmptyEntries);
private static readonly Expression<Func<ICollection<string>, string>> ToStringValue
= list => string.Join('|', list);
public StringCollectionToStringConverter(ConverterMappingHints mappingHints = null)
: base(ToStringValue, ToListValue, mappingHints) { }
public static ValueConverterInfo DefaultInfo
=> new ValueConverterInfo(typeof(ICollection<string>), typeof(string),
i => new StringCollectionToStringConverter(i.MappingHints));
}
推荐阅读
- reactjs - TypeError:无法读取未定义的属性(读取“onSnapshot”)
- python - 如何从 Kivy 向 MDLabel 显示记录?
- angular - 清除 .angular 文件夹中的角度缓存
- python - `a += b` 和 `a = a + b` 有什么区别?
- reactjs - 在 React 中使用控制器的最佳方法
- php - 从多维数组创建新数组
- react-native - 重新加载后反应本机异步功能失败
- r - 当我按下 knit 到 HTML 时,它说,“错误:解析器在第 24 行不能有多字节字符,停止执行,”
- mql4 - MT4 Expert Advisor EA 更新离线图表价格的问题
- python - http.server 连接被对等方重置