6

두 클래스가 있습니다. Group 클래스는 User 클래스 (사용자가 속한 그룹을 나타냄)와 다 대다 관계를 갖고 있으며 그룹은 또한 사용자와 일대일로 많은 관계가 있습니다 클래스 (그룹의 소유자를 나타냄).Entity Framework 코드 첫 번째 매핑

어떻게 매핑 할 수 있습니까?

public class User 
{ 
    public int Id { get; set; } 
    public string Avatar { get; set; } 
    public string Name { get; set; } 
    public string Message { get; set; } 

    public virtual ICollection<Group> OwnedGroups { get; set; } 
    public virtual ICollection<Group> Groups { get; set; } 
} 

public class Group 
{ 
    public int Id { get; set; } 
    public DateTime CreateDate { get; set; } 
    public DateTime ModifyDate { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool System { get; set; } 
    public int ViewPolicy { get; set; } 
    public int JoinPolicy { get; set; } 
    public string Avatar { get; set; } 
    public int Order { get; set; } 
    public int GroupType { get; set; } 

    public virtual User Owner { get; set; } 
    public virtual ICollection<User> Members { get; set; } 
} 

tks!

답변

5

나는 유창하게 API를 사용합니다 :

public class User 
{ 
    ... 

    [InverseProperty("Owner")] 
    public virtual ICollection<Group> OwnedGroups { get; set; } 
    [InverseProperty("Members")] 
    public virtual ICollection<Group> Groups { get; set; } 
} 

public class Group 
{ 
    ... 

    [InverseProperty("OwnedGroups")] 
    public virtual User Owner { get; set; } 
    [InverseProperty("Groups")] 
    public virtual ICollection<User> Members { get; set; } 
} 

InverseProperty가 관계의 양쪽에 필요하지 않습니다하지만 정의가 명확하지 :

public class Context : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Group> Groups { get; set; } 

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

     modelBuilder.Entity<User>() 
        .HasMany(u => u.Groups) 
        .WithMany(g => g.Members); 

     modelBuilder.Entity<User>() 
        .HasMany(u => u.OwnedGroups) 
        .WithRequired(g => g.Owner) 
        .WillCascadeOnDelete(false); 
    } 
} 

또한 데이터 주석으로 수 있어야한다.

+1

우수한! tks – boossss

+0

@Ladislav Mrnka는 WillCascadeOnDelete 및 WithRequired를 설명 할 수 있습니다. Plz. 고맙습니다 !! –

관련 문제