Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中的零或一对多_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架中的零或一对多

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

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

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中。