1

我不确定如何通过加入控制器中的表来获得结果。有 3 个表“组”“用户”“组用户”(桥表)。

public class Group
    {
        [Key]
        public int GroupID { get; set; }
        public string Group_Name { get; set; }
        public ICollection<User> Users { get; set; }
    }

public class User
    {
        [Key]
        public int UserID { get; set; }
        public string User_Name { get; set; }

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

我也有这个 EFContext 类

base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Group>()
                .HasMany(g => g.Users)
                .WithMany(u => u.Groups)
                .Map(m =>
                {
                    m.MapLeftKey("UserID");
                    m.MapRightKey("GroupID");
                    m.ToTable("GroupUSer");
                });

我是否还需要构建一个 GroupUser 类(代表 GroupUser 桥表)?

那么在加入 3 个表以获取组和用户列表时如何获得结果?

GroupViewModel model = new GroupViewModel
            {
                Groups = .... // this should be a linq statement that get results 
                that contains all groups and users
            };

平等的 sql 语句将是

select *
from Group g 
join GroupUser gu on g.GroupID=gu.GroupID
join User u on u.UserID=gu.UserID
4

1 回答 1

1

不,不需要中级课程。

ORM(Object-Relational Mapper,即实体框架是什么)的要点是抽象出数据库并让您以纯面向对象的方式工作。中间表绝对是一个数据库术语,这里不需要。

我能想到的唯一可能导致您创建中间类的原因是当您需要关联上的“有效负载”(额外的元数据)时。例如:

public class User
{
     public int Id { get; set; }
     public int Email { get; set; }
     public virtual ICollection<Account> Accounts { get; set; }
}

public class Account
{
     public int Id { get; set; }
     public virtual ICollection<User> Users { get; set; }
}

现在,如果您希望用户到帐户关联来定义关联是否属于“拥有帐户”类型(管理员),您可以执行以下操作:

public class User
{
     public int Id { get; set; }
     public int Email { get; set; }
     public virtual ICollection<AccountUserAssociation> Accounts { get; set; }
}

public class Account
{
     public int Id { get; set; }
     public virtual ICollection<AccountUserAssociation> Users { get; set; }
}

public class AccountUserAssociation
{
     public virtual User User { get; set; }
     public virtual Account Account { get; set; }
     public AssociationType AssociationType { get; set; }
}

public enum AssociationType { Regular, Administrator }
于 2013-07-30T17:16:38.917 回答