在很多情况下,我需要一些帮助才能为用户添加角色。
所以我User
有很多Role
而Role
有很多User
。
我认为我的存储库中当前的Update()
方法无效。如何构建一个存储库方法,允许我删除所有以前的角色并向用户添加新角色?
这就是我目前所拥有的:
public User UpdateUser(User user, IEnumerable<Expression<Func<User, object>>> properties)
{
if (string.IsNullOrEmpty(user.UserId))
{
throw new InvalidOperationException("user does not exist");
}
else
{
db.Users.Attach(user);
foreach (var selector in properties)
{
string propertyName = Helpers.PropertyToString(selector.Body);
db.Entry(user).Property(propertyName).IsModified = true;
}
}
db.SaveChanges();
return user;
}
这是更新用户的正确方法吗?我假设一切都是超然的。这就是我如何调用它来向用户添加角色:
User user = new User();
user.UserId = userId;
user.Roles = new Domain.Role{ RoleId = 1}; //Assuming there is a role with ID = 1
userRepo.UpdateUser(user, new List<Expression<Func<User, object>>>
{
u => u.Roles
});
答案 0 :(得分:1)
如果您在分离方案中工作,则可能需要查看对象状态管理器。有关详细信息,请参阅这两个答案。
Entity Framework Code First - Add Child Entity to Parent by Primary Key
Save a relation with between two entities an N-N association
第一个是一个简单的例子,其中添加了一个子节点而没有对数据库进行舍入。第二个更复杂但我还没有找到一个很好的方法来清除关系,而不告诉它要删除哪些孩子。
有可能我还没有看过,它是使用您可以从ObjectStateManager获取的RelationshipManager。它包含一些获取相关集合的方法,所以也许你可以以某种方式使用它。