Первое сопоставление кода Entity Framework

У меня есть два класса, класс Group имеет отношения «многие ко многим» с классом User (представляющие группы, к которым принадлежит пользователь), а затем группа также имеет отношение «один ко многим» с классом пользователя (представляющим владельца группы ).

Как я могу отобразить это?

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; }
}

спс заранее!


person boossss    schedule 19.04.2011    source источник


Ответы (1)


Я бы использовал свободный API:

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);
    }
}

Это также должно быть возможно с аннотациями данных:

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 не требуется с обеих сторон отношения, но делает определение более ясным.

person Ladislav Mrnka    schedule 19.04.2011
comment
@Ladislav Mrnka, можете ли вы объяснить WillCascadeOnDelete и WithRequired. Пожалуйста. спасибо!! - person Rusi Nova; 11.08.2011