CTP5: проблема с самостоятельной ссылкой? - PullRequest
1 голос
/ 14 декабря 2010

есть простая модель:

public class Node
{
    public long Id { get; set; }
    public virtual Node Parent { get; set; }
}

следующий код карты вызовет исключение:

public class NodeContext : DbContext
{
    public DbSet<Node> Nodes { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Node>().HasOptional(n => n.Parent).WithMany().IsIndependent().Map(m => m.MapKey(p => p.Id, "ParentId"));

    }
}

Может ли быть так, что он не способен самостоятельно ссылаться на собственное имя внешнего ключа?

1 Ответ

1 голос
/ 18 февраля 2011

Я делаю то же самое, но я не полагаюсь на то, что EF получит правильные ключи, и я делаю это сам.Итак, мой Node класс выглядит следующим образом:

public class Node
{
    public int Id {get;set;}
    public int ParentId {get;set;}

    public virutal Node Parent {get;set;}
    public virtual ICollection<Node> Children {get;set;}
}

И тогда ModelBuilder настраивается следующим образом:

builder.Entity<Node>().HasKey(x => x.Id);

builder.Entity<Node>()
    .HasOptional(s => s.Parent)
        .WithMany(c => c.Children)
            .HasForeignKey(s => s.ParentId);

builder.Entity<Node>().ToTable("Node");
...