我在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的其他内容。
答案 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();