有没有一种优雅的方法来保存实体而不保存它的导航属性?
我将实体图从网页发送到 Web API 服务。由于客户端无权访问导航属性,因此它将没有这些属性的数据发送回服务器。一旦我将实体标记为State.Modified
,EF 也会尝试保存关系。
我将尝试以下工作流程,但不太喜欢它:
- 从数据库加载原始实体
- 创建通用方法以将所有非导航属性从修改后的实体复制到原始实体
- 名称以结尾的属性
Id
不会被复制(因为我也映射了外键) - 保存此类实体
这不是很优雅。你会怎么做?
有没有一种优雅的方法来保存实体而不保存它的导航属性?
我将实体图从网页发送到 Web API 服务。由于客户端无权访问导航属性,因此它将没有这些属性的数据发送回服务器。一旦我将实体标记为State.Modified
,EF 也会尝试保存关系。
我将尝试以下工作流程,但不太喜欢它:
Id
不会被复制(因为我也映射了外键)这不是很优雅。你会怎么做?
这不是很优雅。你会怎么做?
我不会写在大多数情况下自动起作用的东西。我也不喜欢自动映射。
所以我最终会手动做事:
public User UpdateUser(User updatedUser)
{
// Gets the original entity
var dbUser = this.context.Users.SingleOrDefault(z => z.Id == updatedUser.Id);
if (dbUser == null)
{
// Exception here
}
// Manually update ONLY properties that can be updated through UpdateUser
dbUser.Name = updatedUser.Name;
dbUser.FirstName = updatedUser.FirstName;
...
// Saves the context
this.context.SaveChanges();
// Returns updated entity
return dbUser;
}
不依赖调用您的服务的层或基于属性名称的规则来确保可以更新或不更新属性会更安全。
例如,在上述情况下,可以假设您不想更新User.PasswordHash
属性,以防您有专门的ChangePassword
服务。