实体框架核心覆盖属性问题

发布于 2025-01-09 03:32:33 字数 999 浏览 0 评论 0原文

我在 EF Core Table-per-hierarchy 中有 2 个类

public class Offering
{
  [Required]
  [JsonPropertyName("startDate")]
  public virtual DateTime StartDate { get; set; }

  [Required]
  [JsonPropertyName("endDate")]
  public virtual DateTime EndDate { get; set; }
}
public class ComponentOffering : Offering
{
 [Required]
 [JsonPropertyName("startDateTime")]
 public override DateTime StartDate { get; set; }

 [Required]
 [JsonPropertyName("endDateTime")]
 public override DateTime EndDate { get; set; }
}

,当我向 ComponentOffering 模型中的属性 StartDateEndDate 添加值并将其保存到数据库时,我会保存默认的 DateTime 值。

有什么想法吗?

笔记 : 映射

modelBuilder.Entity<ComponentOffering>()
                .Property(c => c.StartDate)
                .HasColumnName("StartDate");
modelBuilder.Entity<ComponentOffering>()
                .Property(c => c.EndDate)
                .HasColumnName("EndDate");

I have 2 classes

public class Offering
{
  [Required]
  [JsonPropertyName("startDate")]
  public virtual DateTime StartDate { get; set; }

  [Required]
  [JsonPropertyName("endDate")]
  public virtual DateTime EndDate { get; set; }
}
public class ComponentOffering : Offering
{
 [Required]
 [JsonPropertyName("startDateTime")]
 public override DateTime StartDate { get; set; }

 [Required]
 [JsonPropertyName("endDateTime")]
 public override DateTime EndDate { get; set; }
}

In EF Core Table-per-hierarchy when I add values to properties StartDate and EndDate in ComponentOffering model and save it to database I get default DateTime values saved.

Any ideas ?

NOTE :
Mappings

modelBuilder.Entity<ComponentOffering>()
                .Property(c => c.StartDate)
                .HasColumnName("StartDate");
modelBuilder.Entity<ComponentOffering>()
                .Property(c => c.EndDate)
                .HasColumnName("EndDate");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱要勇敢去追 2025-01-16 03:32:33

您需要忽略抽象类映射。之后,您可以正常映射您的具体类属性。

使用 Fluent API,它看起来像这样:

public void Configure(EntityTypeBuilder<Offering> builder)
{
    builder.ToTable("Offerings");

    builder.Ignore(x => x.StartDate);
    builder.Ignore(x => x.EndDate);
}


public void Configure(EntityTypeBuilder<ComponentOffering> builder)
{
    builder.ToTable("Offerings");

    builder.Property(x => x.StartDate).IsRequired(true);
    builder.Property(x => x.EndDate).IsRequired(true);
}

You need ignore abstract class mapping. After that you can map your concrete class property normally.

Using Fluent API it would look something like this:

public void Configure(EntityTypeBuilder<Offering> builder)
{
    builder.ToTable("Offerings");

    builder.Ignore(x => x.StartDate);
    builder.Ignore(x => x.EndDate);
}


public void Configure(EntityTypeBuilder<ComponentOffering> builder)
{
    builder.ToTable("Offerings");

    builder.Property(x => x.StartDate).IsRequired(true);
    builder.Property(x => x.EndDate).IsRequired(true);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文