实体框架CTP5代码优先映射 - 同一表中的外键

时间:2011-02-28 18:29:19

标签: entity-framework entity-framework-4 data-modeling code-first entity-framework-ctp5

我如何使用modelBuilder映射这样的东西?其中可以为空的外键引用相同的表主键

Table: Task
taskID int pk
taskName varchar
parentTaskID int (nullable) FK

任务类:

public class Task
{
     public int taskID {get;set;}
     public string taskName {get;set;}
     public int parentTaskID {get;set;}
     public Task parentTask {get;set;}
}

...

    modelBuilder.Entity<Task>()
        .HasOptional(o => o.ParentTask)....

1 个答案:

答案 0 :(得分:5)

以下代码为您提供了所需的架构。请注意,您还需要将ParentTaskID外键定义为可以为空的整数,就像我在下面所做的那样。

public class Task
{
    public int TaskID { get; set; }
    public string TaskName { get; set; }        
    public int? ParentTaskID { get; set; }
    public Task ParentTask { get; set; }
}

public class Context : DbContext
{
    public DbSet<Task> Tasks { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Task>()
                    .HasOptional(t => t.ParentTask)
                    .WithMany()
                    .HasForeignKey(t => t.ParentTaskID);
    }
}