【发布时间】:2021-07-02 03:18:01
【问题描述】:
我有一个包含多个列(名为 Day0、Day1 等)的表,每个列都存储一个 INT,并且想知道是否可以在 POCO 类中声明 public Days int[] {get; set;} 并使用 Fluent API将每个 Day<n> 列映射到数组中的一个项目,而不是为每一列声明一个单独的属性。
【问题讨论】:
标签: entity-framework-core poco
我有一个包含多个列(名为 Day0、Day1 等)的表,每个列都存储一个 INT,并且想知道是否可以在 POCO 类中声明 public Days int[] {get; set;} 并使用 Fluent API将每个 Day<n> 列映射到数组中的一个项目,而不是为每一列声明一个单独的属性。
【问题讨论】:
标签: entity-framework-core poco
您可以将Indexer property 与拥有的实体结合使用。
你的实体
public OwnedDays? Days { get; set; } = new();
拥有天数
public class OwnedDays
{
private readonly Dictionary<string, int?> _data = new Dictionary<string, int?>
{
{ "0", default },
{ "1", default },
{ "2", default },
{ "3", default },
};
public int? this[string key]
{
get => _data[key];
set => _data[key] = value;
}
}
Context.OnModelCreating
modelBuilder.Entity<YourEntity>().OwnsOne(
ye => ye.Days,
d => {
d.IndexerProperty<int?>("0").HasColumnName("Day0");
d.IndexerProperty<int?>("1").HasColumnName("Day1");
d.IndexerProperty<int?>("2").HasColumnName("Day2");
d.IndexerProperty<int?>("3").HasColumnName("Day3");
});
应用程序代码
var entity = new YourEntity();
entity.Days["0"] = 0;
entity.Days["1"] = 1;
【讨论】:
entity.Days[0] 这样的命名属性上使用。这是我能得到的最接近的吗?
Days 拥有的YourEntity 实体上?