实体框架代码第一映射

时间:2011-04-19 18:26:00

标签: c# mapping entity-relationship ef-code-first entity-framework-4.1

我有两个类,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; }
}
事先提前!

1 个答案:

答案 0 :(得分:5)

我会使用流畅的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,但定义更清晰。

相关问题