【问题标题】:Zero or One To Many in Entity Framework实体框架中的零或一对多
【发布时间】:2018-09-05 21:01:51
【问题描述】:

我的情况如下:Periodic Task实体可以有很多Task,但是一个Task可以没有或者只有一个Periodic Task与之关联。也就是说,我需要Task Periodic on Task的外键为空。但是,即使使用以下语句,我也无法通过实体框架进行此配置:

public int? PeriodicTaskID

有哪些可能的解决方案?

非常感谢。

public class Task
{
    public int TaskID { get; set; }

    public int? PeriodicTaskID { get; set; }

    public virtual PeriodicTask PeriodicTask { get; set; }
}

public class PeriodicTask
{
    public int PeriodicTaskID { get; set; }

    public virtual ICollection<Task> Tasks { get; set; }
}

【问题讨论】:

  • 我建议将您的 Task 实体重命名为其他名称,因为 System.Threading.Tasks.Task 现在在 C#/.NET 中被大量使用,因此您最终会遇到很多名称冲突。
  • 感谢您的建议。目前我对此没有任何冲突,但实际上是要避免的。
  • 我看不到数据注释或 fluenti api 来配置您的关联。您希望它在没有任何配置的情况下如何工作?
  • 我创建了继承自 EntityTypeConfiguration 的类来配置每个实体的属性并进行映射。外键 PeriodicTask 已创建,但不接受 Task 表上的空值。
  • 该模型应该按照约定正确配置,没有任何流畅映射的注释。它看起来是正确的,只是没有设置 PeriodicTasks.Tasks 属性。错误是什么?

标签: c# entity-framework entity-framework-6


【解决方案1】:

您可以像这样通过数据注释定义关系;

public class Task
{
    public int TaskID { get; set; }

    public int? PeriodicTaskID { get; set; }
    [ForeignKey("PeriodicTaskID ")]
    public virtual PeriodicTask PeriodicTask { get; set; }
}

通过 Fluent API;

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    //..
    modelBuilder.Entity<Task>()
        .HasOne(t => t.PeriodicTask)
        .WithMany(pt => pt.Tasks);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 2015-05-04
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
相关资源
最近更新 更多