mvc代码首先建模多个关系 - 简单的例子

时间:2012-11-23 09:46:14

标签: asp.net-mvc entity-framework ef-code-first entity

我在MVC应用程序中有两个实体:

public class User
{
    public int ID {get; set;}
    public string Forename {get; set;}
    public string Surname {get;set;}
}

public class SubGroup
{
    public int ID {get;set;}
    public string Name {get;set;}
}

我想使用Code First在它们之间创建关系。关系是每个用户可以是0个或更多子组的成员。

请有人建议这样做的最好方法,因为我已经看到了一些关于SO的例子,我很困惑。我已经看过有关在类中实现ICollections的内容,以及有关使用流畅API的其他内容。

2 个答案:

答案 0 :(得分:1)

我猜User和SubGroup在数据库中有相同的表 你需要在这些表之间创建关系表(字段User_id,Group_id) 像UserGroups这样的新实体的模型

然后您可以在用户类

中创建合成

答案 1 :(得分:1)

ICollections方法: UPDATE:

如果我理解正确你有多对多的关系(组有很多用户,用户可以在很多组中),那么代码应该是这样的:

        public class RelationExampleContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<SubGroup> SubGroups { get; set; }

}


public class User
{
    [Key]
    public int ID { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }

    public ICollection<SubGroup> SubGroups { get; set; } 
}

public class SubGroup
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

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

将用户添加到组示例:

 var db = new RelationExampleContext();

var subGroups = new List<SubGroup>
                                {
                                    new SubGroup() {Name = "Subgroup1"},
                                    new SubGroup() {Name = "Subgroup2"}
                                };

            var users = new List<User>
                            {
                                new User()
                                    {
                                        Forename = "Forename1",
                                        Surname = "Surname1",
                                        SubGroups = new List<SubGroup>
                                                        {
                                                            subGroups.First(),
                                                            subGroups.Last()
                                                        }
                                    },
                                new User()
                                    {
                                        Forename = "Forename2",
                                        Surname = "Surname2",
                                        SubGroups = new List<SubGroup>
                                                        {
                                                            subGroups.First()
                                                        }
                                    }
                            };

            foreach (var subGroup in subGroups)
            {
                db.SubGroups.Add(subGroup);
            }

            foreach (var user in users)
            {
                db.Users.Add(user);
            }

            db.SaveChanges();