实体框架附加不更新DB

时间:2017-03-17 15:33:30

标签: database entity-framework

我有以下问题:当我尝试通过将修改后的用户条目传递到我的UserService类中的ModifyUser方法来更改用户的城镇时,一切似乎都可以,但更改未应用于数据库中。

我尝试了在stackoverflow上发现的类似问题的解决方案,但似乎都没有。

正如他们所说的“一张图片胜过千言万语”看看这个,因为与我的简短解释相比,它更容易理解。 http://prntscr.com/el51z0

        else if (property == "BornTown")
        {
            if (this.townService.TownExists(value))
            {
                User user = this.userService.GetUserByName(username);

                Town town = this.townService.GetTownByName(value);
                user.BornTown = town;

                this.userService.ModifyUser(user);
            }
            else
            {
                Console.WriteLine($"Value {value} is not valid.");
                throw new ArgumentException($"Town {value} not found!");
            }
        }

当我将用户传递给ModifyUser时,数据库不会更新,并且BornTown保持为NULL。

    public void ModifyUser(User user)
    {
        using (PhotoShareContext context = new PhotoShareContext())
        {
            context.Users.Attach(user);

            context.Entry(user).State = EntityState.Modified;

            context.SaveChanges();
        }
    }

3 个答案:

答案 0 :(得分:0)

你能试试吗

context.Users.where(x=>x.username == username).FirstOrDefault();

并且不要使用any()

您是否可以通过在功能中取回值后再次检查用户名来检查您是否获得了正确的用户名。

答案 1 :(得分:0)

或者尝试以下代码:

User user  = context.users.where(x=>x.username == username).FirstOrDefault();
user.BornTown = town; //string
context.savechanges();

答案 2 :(得分:0)

不要直接操纵导航属性,而是尝试使用外键管理实体关系:

Town town = this.townService.GetTownByName(value); user.BornTownId = town.Id;

请记住,如果您在模型实体中有创建显式外键,则应映射现有外键:查看“用户”表 - 查看外键列的命名方式 - 它应该看起来像UserTown_Id。然后将它放在模型类中(您可以添加外键属性或将其映射到模型构建器中)。

将新属性添加到模型时要小心(它可以使您与“城镇”的可选关系成为必需)。