Entity Framework 连接了两个具有复合键的表
Two tables with composite key are joined in Entity Framework
我在SQL服务器上有四个table,图像table和关系。
问题是当我使用 Entity Framework 时 GroupAdmins
和 GroupMembers
table 被合并为一个 table,图像显示情况:
我想获得 Entity Framework 中的四个 table。我该怎么办?
更新
真正的问题是我无法像处理其他 table 一样为 GroupAdmins
和 GroupMembers
table 添加或删除项目秒。例如,如果我想将项目添加到 AspNetUsers
,我使用这个:
using (var db=new DatabaseContext())
{
AspNetUsers user = new AspNetUsers{Id=1,Email="something@email.com"};
db.AspNetUsers.add(user);
db.SaveChanges();
}
虽然我不能为 GroupAdmins
和 GroupMembers
做同样的事情,因为 GroupAdmins
和 GroupMembers
不存在。
如果你有两个table之间的many-to-many关系,在关系数据库中,你需要一个"link"table连接两个碱基tables.
EF 会自动为您处理 - 它没有明确地表明 link table - 它在幕后内部处理这些插入和删除。您根本不需要做任何特别的事情!使用这个默认行为 - 不要抗拒它!它对你有利!
你所做的基本上是将 table 之一的新条目添加到 collection-based 导航 属性 中,然后 EF 将自动将必要的条目插入相关 link table.
例如,您可以这样做:
using (var db = new DatabaseContext())
{
AspNetUsers user = new AspNetUsers { Id = 1, Email = "something@email.com" };
db.AspNetUsers.add(user);
// get a group to add the new user to
Groups g = db.Groups.FirstOrDefault(g => g.Name = "SomeGroupName");
if(g != null)
{
// since I don't have your EDMX model here, I don't know if "AspNetUsers" for the "Groups"
// refers to the "GroupMembers" or the "GroupAdmins" connection - *YOU* can see this when
// you look at the EDMX model designer!
g.AspNetUsers.Add(user);
}
// now when you save, you'll get a new user in "AspNetUsers", AND ALSO: you'll get an entry
// in either "GropuMembers" or "GroupAdmins" that contains the two ID's - AspNetUsers.Id
// and the Id for the group with the name of "SomeGroupName"
db.SaveChanges();
}
我在SQL服务器上有四个table,图像table和关系。
问题是当我使用 Entity Framework 时 GroupAdmins
和 GroupMembers
table 被合并为一个 table,图像显示情况:
我想获得 Entity Framework 中的四个 table。我该怎么办?
更新
真正的问题是我无法像处理其他 table 一样为 GroupAdmins
和 GroupMembers
table 添加或删除项目秒。例如,如果我想将项目添加到 AspNetUsers
,我使用这个:
using (var db=new DatabaseContext())
{
AspNetUsers user = new AspNetUsers{Id=1,Email="something@email.com"};
db.AspNetUsers.add(user);
db.SaveChanges();
}
虽然我不能为 GroupAdmins
和 GroupMembers
做同样的事情,因为 GroupAdmins
和 GroupMembers
不存在。
如果你有两个table之间的many-to-many关系,在关系数据库中,你需要一个"link"table连接两个碱基tables.
EF 会自动为您处理 - 它没有明确地表明 link table - 它在幕后内部处理这些插入和删除。您根本不需要做任何特别的事情!使用这个默认行为 - 不要抗拒它!它对你有利!
你所做的基本上是将 table 之一的新条目添加到 collection-based 导航 属性 中,然后 EF 将自动将必要的条目插入相关 link table.
例如,您可以这样做:
using (var db = new DatabaseContext())
{
AspNetUsers user = new AspNetUsers { Id = 1, Email = "something@email.com" };
db.AspNetUsers.add(user);
// get a group to add the new user to
Groups g = db.Groups.FirstOrDefault(g => g.Name = "SomeGroupName");
if(g != null)
{
// since I don't have your EDMX model here, I don't know if "AspNetUsers" for the "Groups"
// refers to the "GroupMembers" or the "GroupAdmins" connection - *YOU* can see this when
// you look at the EDMX model designer!
g.AspNetUsers.Add(user);
}
// now when you save, you'll get a new user in "AspNetUsers", AND ALSO: you'll get an entry
// in either "GropuMembers" or "GroupAdmins" that contains the two ID's - AspNetUsers.Id
// and the Id for the group with the name of "SomeGroupName"
db.SaveChanges();
}