实体框架不会将更改保存到数据库



我在使用实体框架保存对数据库的更改时遇到问题。我用的是三张桌子;AspNetUsers、tblCountry和tblCountry_AspNetUsers。

tblCountry_AspNetUsers由两列组成;UserId和CountryId,这在tblCountry和AspNetUsers之间创建了一对多关系。

目前,我想做的是更改特定用户的国家/地区,但实体框架不允许我访问tblCountry_AspNetUsers数据库,而是在tblCountry上创建一个AspNetUsers的ICollection。我可以直接在AspNetUser上分配Id,但我现在还不想开始从标识表中添加/删除列,因为我首先使用数据库,我听说这可能会导致问题。

无论如何,我可以从ICollection中删除,并将这些更改保存到数据库中,但当我尝试将同一用户添加到不同的国家/地区时,它不会正确保存到数据库,但我可以在调试时在上下文对象中找到该用户。

我曾尝试将entitystate附加并更改为added和modified,但当我尝试这样做时,它会脱离方法,不会更新数据库。(基本上,当我尝试连接时它会冻结)

编辑用户的代码如下所示:

(注意,UserManager处理身份用户模型ApplicationUser,在这方面与AspNetUsers不同)

(此外,tblCountry.AspNetUsers是指分配给特定国家/地区的用户的集合)

 ...
            var aspuser = new AspNetUsers();
            using (DbContext dc = new DbContext())
            {
                aspuser = dc.AspNetUsers.First(x => x.Id == userid);
                var user = await UserManager.FindByIdAsync(userid);
                user.Email = updatedUser.UserName;
                user.UserName = updatedUser.Email;
                var result = await UserManager.UpdateAsync(user);
                aspuser.tblCountry.AspNetUsers.Remove(aspuser);
                await dc.SaveChangesAsync();  
            }
            using (DbContext dc = new DbContext())
            {
                var c = _country.GetById(newcountryid);
                c.AspNetUsers.Add(aspuser);
                await dc.SaveChangesAsync();  
            }
            return Users(userid);
        }

如果这是一个我可以直接访问的表,那将是非常容易的,但有了这样的ICollection,我不知道该怎么做才能使它工作,我很感激任何输入!

干杯

此行aspuser = dc.AspNetUsers.First(x => x.Id == userid);位于using (DbContext dc = new DbContext())内部,这意味着当您离开该块时,对象aspuser将与上下文分离。你应该做:

var c = _country.GetById(newcountryid);
            c.AspNetUsers.Add(aspuser);
            await dc.SaveChangesAsync(); 

在与上述代码相同的使用块中,为什么要将其分离?

相关内容

  • 没有找到相关文章

最新更新