在Entity Framework中,我如何处理同一个类的多个外键

时间:2013-10-01 15:14:50

标签: .net entity-framework-5

所以我有两个类定义为

public class Group
{
    public string GroupId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public virtual ICollection<User> Users{ get; set; }
}

public class User
{
    public string UserId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

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

问题是组和用户之间存在两种关系。一个是任何组只能有一个用户是创建者。另一个是组有许多用户作为成员。

我想知道如何使用基于约定的定义来定义它,或者我是否需要使用另一种方法,因为它无法仅通过命名约定来推断它。

1 个答案:

答案 0 :(得分:2)

您所要做的就是向User实体添加另一个Group类型的虚拟财产:

public class Group
{
    public string GroupId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }


    public virtual User Creator { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

public class User
{
    public string UserId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

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

modelBuilder.Entity<User>()
    .HasMany(u => u.Groups).WithMany(g => g.Users)
    .Map(t => t.MapLeftKey("UserId")
        .MapRightKey("GroupId")
        .ToTable("UserGroup"));

SQL表格输出

SQL Tables