C# 实体框架中的零或一对多
我的情况如下:周期性任务实体可以有许多任务,但一个任务可以没有任务,也可以只有一个与之关联的周期性任务。也就是说,我需要Task Periodic on Task的外键为null。但是,我无法通过实体框架进行此配置,即使使用以下语句:C# 实体框架中的零或一对多,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我的情况如下:周期性任务实体可以有许多任务,但一个任务可以没有任务,也可以只有一个与之关联的周期性任务。也就是说,我需要Task Periodic on Task的外键为null。但是,我无法通过实体框架进行此配置,即使使用以下语句: public int? PeriodicTaskID 可能的解决办法是什么 多谢各位 public class Task { public int TaskID { get; set; } public int? PeriodicTaskID
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; }
}
公共类任务
{
public int TaskID{get;set;}
public int?PeriodicTaskID{get;set;}
公共虚拟周期任务周期任务{get;set;}
}
公开课
{
公共整数周期ictaskid{get;set;}
公共虚拟ICollection任务{get;set;}
}
您可以通过这样的数据注释定义关系
public class Task
{
public int TaskID { get; set; }
public int? PeriodicTaskID { get; set; }
[ForeignKey("PeriodicTaskID ")]
public virtual PeriodicTask PeriodicTask { get; set; }
}
通过fluentapi
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//..
modelBuilder.Entity<Task>()
.HasOne(t => t.PeriodicTask)
.WithMany(pt => pt.Tasks);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
//..
modelBuilder.Entity()
.HasOne(t=>t.PeriodicTask)
.有许多(pt=>pt.任务);
}
我建议将您的任务
实体重命名为其他实体,因为System.Threading.Tasks.Task
现在在C#/.NET中被大量使用,因此您最终会遇到大量名称冲突。谢谢您的建议。目前为止,我对此没有任何冲突,但事实上这是需要避免的。我既没有看到数据注释,也没有看到配置关联的fluenti api。如果没有任何配置,您希望它如何工作?我已经创建了从EntityTypeConfiguration继承的类来配置每个实体的属性并进行映射。已创建外键PeriodictTask,但不接受任务表上的空值。该模型应按约定正确配置,且不带fluent映射的任何注释。它看起来是正确的,只是没有设置PeriodicTasks.Tasks属性。错误是什么?PeriodicTaskID将在。不在EF6中。