保存EF实体而不保存导航属性

时间:2014-03-07 13:51:08

标签: entity-framework object-graph

是否有一种优雅的方式来保存实体而不保存它的导航属性?

我将实体图从网页发送到Web API服务。由于客户端无法访问导航属性,因此它将没有这些属性的数据发送回服务器。一旦我将实体标记为State.Modified,EF也会尝试保存关系。

我打算尝试以下工作流程,但不太喜欢它:

  1. 从数据库加载原始实体
  2. 创建将所有非导航属性从已修改的实体复制到原始实体的通用方法
  3. 名称以Id结尾的属性不会被复制(因为我也映射了外键)
  4. 保存此类实体
  5. 这不是很优雅。你会怎么做?

1 个答案:

答案 0 :(得分:0)

  

这不是很优雅。你会怎么做?

我会写一些自动大多数情况下工作的内容。我也不喜欢自动化

所以我最终会手动做事:

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属性。