我有一个如下数据库模式:
用户 1 ---- * UserRole * ---- 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; }
}
我有一个业务组件类和一个数据访问类来处理业务逻辑和数据访问。
我想将Roles添加到选定的用户,代码如下:
在业务组件中:
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表。有谁对此有所了解?
答案 0 :(得分:0)
public class UserRole
{
public virtual User User {get; set;}
public virtual Role Role {get;set;}
}
public class User
{
...
public virtual List<UserRole> UserRoles { get; set;}
}
public class Role
{
...
public virtual List<UserRole> RoleUsers { get; set;}
}
或
public class User
{
...
public virtual List<Role> Roles { get; set;}
public virtual Role Role { get; set;}
}
public class Role
{
public virtual List<User> Users { get; set;}
public virtual User User { get; set;}
}
第一个解决方案看起来更好,你应该添加 DbSet UserRoles 到您的DbContext
已经过EF CTP5 Poco测试。
祝你好运