EF code-first many-to-many with additional data

后端 未结 1 1155
再見小時候
再見小時候 2020-12-06 15:56

I have these tables:

CREATE TABLE [EDR_SECURITY].[Person](
    [ixPerson] [bigint] IDENTITY(1,1) NOT NULL,
    [sName] [nvarchar](200) NOT NULL,
) ON [PRIMAR         


        
相关标签:
1条回答
  • 2020-12-06 16:42

    If I understood exactly from the raw SQL...

    EDIT: and as suggested in your specific case I think this is pretty close at least...

    public class Person
    {
        public int PersonID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<PersonSecurityGroupDefinition> 
            PersonSecurityGroups { get; set; }
    }
    public class SecurityGroup
    {
        public int SecurityGroupID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public virtual ICollection<PersonSecurityGroupDefinition> 
            PersonSecurityGroups { get; set; }
    }
    public class PersonSecurityGroupDefinition
    {
        public int PersonID { get; set; }
        public int SecurityGroupID { get; set; }
        public int Privilege { get; set; }
        // don't use virtual here as these are PK-s
        public Person Person { get; set; }
        public SecurityGroup SecurityGroup { get; set; }
    }
    

    ...and in the OnModelCreating (override in your DbContext...

    modelBuilder.Entity<PersonSecurityGroupDefinition>()
        .HasKey(i => new { i.PersonID, i.SecurityGroupID });
    
    modelBuilder.Entity<PersonSecurityGroupDefinition>()
        .HasRequired(i => i.Person)
        .WithMany(u => u.PersonSecurityGroups)
        .HasForeignKey(i => i.PersonID)
        .WillCascadeOnDelete(false);
    
    modelBuilder.Entity<PersonSecurityGroupDefinition>()
        .HasRequired(i => i.SecurityGroup)
        .WithMany(d => d.PersonSecurityGroups)
        .HasForeignKey(i => i.SecurityGroupID)
        .WillCascadeOnDelete(false);
    

    ...hope this is it.

    0 讨论(0)
提交回复
热议问题