Ari*_*ian 2 c# linq-to-entities many-to-many entity-framework entity-framework-4
我有4张桌子:

但是当我创建一个实体框架模型时,为什么tblRoleInProfile不生成?

我有一个想要将其转换为EF的Linq TO SQL模型,现在我的表格没有生成.我怎么解决这个问题?
更新1:
您认为我们有一些配置文件和一些角色.如果我们想要配置文件A有角色1插入一个记录tblRoleInProperty,如果我们想要配置文件B没有角色2(如果存在)删除它的记录tblRoleInProperty.我不想删除个人资料.另一个问题是选择新投影.任何人都可以指导我在EF中写这个查询:
var prs = from p in dc.tblProfiles
join rp in dc.tblRoleInProfiles
on p.ProfileId equals rp.ProfileId
join r in dc.tblRoles
on rp.RoleId equals r.RoleId
select new
{
ProfileName = p.ProfileName,
ProfileId = p.ProfileId,
RoleName = r.RoleName,
RoleId = r.RoleId
};
Run Code Online (Sandbox Code Playgroud)
谢谢
这就是EF的工作原理.EF是ORM工具 - 它试图隐藏持久性细节,并且多对多关系中的联结表正是您不希望在对象模型中看到的细节.
您可以将查询重写为:
var prs = from p in dc.tblProfiles
from r in p.tblRoles
select new
{
ProfileName = p.ProfileName,
ProfileId = p.ProfileId,
RoleName = r.RoleName,
RoleId = r.RoleId
};
Run Code Online (Sandbox Code Playgroud)
更新和删除关系也适用于导航属性.
将角色插入到个人资料中:
// Dummy objects so you do not need to load them from DB first.
// These objects must exist in database
var p = new Profile { ProfileId = ... };
var r = new Role { RoleId = ... };
context.tblProfiles.Attach(p);
context.tblRoles.Attach(r);
p.tblRoles.Add(r);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
从个人资料中删除角色:
// Dummy objects so you do not need to load them from DB first.
// These objects must exist in database
var p = new Profile { ProfileId = ... };
var r = new Role { RoleId = ... };
p.tblRoles.Add(r);
context.tblProfiles.Attach(p);
context.tblRoles.Attach(r);
p.tblRoles.Remove(r);
// another approach:
// context.ObjectStateManager.ChangeRelationshipState(p, r, x => x.tblRoles, EntityState.Deleted);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2867 次 |
| 最近记录: |