how to do many to many with the same table with EF4 Code First

前端 未结 1 1561
名媛妹妹
名媛妹妹 2021-01-04 23:04

I have this schema:

create table Person
(
id int identity primary key,
name nvarchar(30)
)

create table PersonPersons
(
PersonId references Person(id),
Chil         


        
相关标签:
1条回答
  • 2021-01-04 23:59

    For the POCO...

    class Person
    {
        public Guid PersonId { get; set; }
        public virtual Person Parent { get; set; }
        public virtual ICollection<Person> Children { get; set; }
    }
    

    ...set up the mapping in the DbContext...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasOptional(entity => entity.Parent)
                .WithMany(parent => parent.Children)
                .HasForeignKey(parent => parent.PersonId);
    }
    

    ...will give you a default implementation. If you need to rename the table explicitly (and want a many-to-many relationship), add in something like this...

    class Person
    {
        public Guid PersonId { get; set; }
        public virtual ICollection<Person> Parent { get; set; }
        public virtual ICollection<Person> Children { get; set; }
    }
    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ConfigureProducts(modelBuilder);
        ConfigureMembership(modelBuilder);
    
        modelBuilder.Entity<Person>()
            .HasMany(entity => entity.Children)
            .WithMany(child => child.Parent)
            .Map(map =>
            {
                map.ToTable("PersonPersons");
                map.MapLeftKey(left => left.PersonId, "PersonId"); 
                map.MapRightKey(right => right.PersonId, "ChildPersonId");
                // For EF5, comment the two above lines and uncomment the two below lines.
                // map.MapLeftKey("PersonId");
                // map.MapRightKey("ChildPersonId");
            }); 
    }
    
    0 讨论(0)
提交回复
热议问题