Entity Framework CTP5 Code-First Mapping — внешний ключ в той же таблице

Как мне сопоставить что-то подобное с помощью 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)....

person Chris Klepeis    schedule 28.02.2011    source источник


Ответы (1)


Следующий код дает вам желаемую схему. Обратите внимание, что вам также необходимо определить внешний ключ ParentTaskID как целое число, допускающее значение NULL, как я сделал ниже.

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);
    }
}
person Morteza Manavi    schedule 28.02.2011