保存EF实体而无需保存导航属性



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

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

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

  1. 从数据库加载原始实体
  2. 创建通用方法,将所有非循环属性从修改后复制到原始实体
  3. Id中名称结尾的属性不会被复制(因为我也映射了外国鸟)
  4. 保存此类实体

这不是很优雅。您将如何做?

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

i会不是写一些自动化在最多案例中起作用的东西。我不喜欢 automapping

所以我最终要手动做事:

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服务。

最新更新