Настройка рекурсивного сопоставления с свободное владение для Entity Framework 4.1 - PullRequest
3 голосов
/ 26 июня 2011

Как настроить отображение на беглом языке для этого типа?

public class Topic
{
    public int Id { get; set; }    
    public string Title { get; set; }    
    public virtual ICollection<Topic> Children { get; set; }    
    public int ParentId { get; set; }    
    public Topic Parent { get; set; }    
    public virtual ICollection<Topic> Related { get; set; }
}

1 Ответ

7 голосов
/ 26 июня 2011

Я предполагаю, что ParentId не требуется, так как не у каждой темы будет родитель.

public class Topic
{
    public int Id { get; set; }
    public string Title { get; set; }
    public int? ParentId { get; set; }
    public Topic Parent { get; set; }
    public virtual ICollection<Topic> Children { get; set; }
    public virtual ICollection<Topic> Related { get; set; }
}

, тогда отображение будет выглядеть примерно так:

public class TopicMap : EntityTypeConfiguration<Topic>
{
    public TopicMap()
    {
        HasKey(t => t.Id);

        Property(t => t.Title)
            .IsRequired()
            .HasMaxLength(42);

        ToTable("Topic");
        Property(t => t.Id).HasColumnName("Id");
        Property(t => t.Title).HasColumnName("Title");
        Property(t => t.ParentId).HasColumnName("ParentId");

        // Relationships
        HasOptional(t => t.Parent)
            .WithMany()
            .HasForeignKey(d => d.ParentId);
        //Topic might have a parent, where if it does, has a foreign key
        //relationship to ParentId
    }
}

И плагин включенпривязка к модели:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new TopicMap());
    //modelBuilder.Configurations.Add(new TopicChildrenMap()); ..etc
    //modelBuilder.Configurations.Add(new TopicRelatedMap());  ..etc
}

Я бы также порекомендовал получить в руки EF Power Tools CTP .Это очень помогает в изучении и понимании того, как создавать беглые конфиги.

Надеюсь, это поможет.

...