【发布时间】:2019-02-01 10:07:00
【问题描述】:
我有一个如下的数据库架构:
用户 1 ---- * 用户角色 *----1 角色
我有一个 POCO 用户和角色类如下:
public class User
{
public virtual Int64 Id { get; set; }
public string FullName { get; set; }
public virtual List<Role> Roles { get; set; }
}
public class Role
{
public virtual Int64 Id { get; set; }
public string Name { get; set; }
public virtual List<User> Users { get; set; }
}
我有一个业务组件类和一个数据访问类来处理业务逻辑和数据访问。
我想为选定的用户添加角色,代码如下:
在业务组件中:
public void AssignRoles(User user, string[] roleIds)
{
user.Roles.Clear();
foreach (string roleId in roleIds)
{
Role role = new RolesDataAccess().SelectRoleById(int.Parse(roleId));
if (role != null)
{
user.Roles.Add(role);
}
}
this.SaveUser(user);
}
public User SaveUser(User user)
{
if (user.Id == 0)
{
return dataAccess.Create(user);
}
else
{
return dataAccess.Update(user);
}
}
在数据访问中:
public User Update(User user)
{
EntityKey key = null;
object original = null;
using (DocsFlowContext ctx = new DocsFlowContext())
{
key = ctx.CreateEntityKey(User.EntitySetName, user);
if (ctx.TryGetObjectByKey(key, out original))
{
ctx.ApplyCurrentValues(key.EntitySetName, user);
}
ctx.SaveChanges();
}
return user;
}
此代码运行时没有任何错误,但它不会向我的 UserRole 表中插入任何数据。有人对此有任何想法吗?
【问题讨论】:
-
只有在数据库中存在角色时才添加角色。您能否检查角色确实存在并添加到
user.Roles列表中(只需在调用SaveChanges之前查看user对象)。 -
我正在调试这个,我在更新方法中发现了这一点。 ctx.ApplyCurrentValues(key.EntitySetName, user);此代码行应用对主要属性所做的所有更改,但角色列表除外。 User.Roles 列表未更新。这就是它不向数据库插入任何记录的原因。关于这个问题有什么想法吗??
标签: .net entity-framework-4 poco