实体框架代码优先映射



我有两个类,Group类与User类(表示用户所属的组)具有多对多关系,然后组与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; }
}

提前感谢!

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

相关内容

  • 没有找到相关文章

最新更新