【问题标题】:Why is the UpdateAsync method setting to null, false?为什么 UpdateAsync 方法设置为 null、false?
【发布时间】:2021-11-22 23:20:47
【问题描述】:

我只想更新数据库中的 EMAIL。

NOW 数据库中的字段值

Id = 1,
Email = email@site.com,
IsActiveSubscibe = true,
PurchaseToken = "sdsdsdsd",
AutoRenewing = true,
IsActiveSubscibe = true,
DataTime = DateTime.UtcNow

正在更新(我只想更新电子邮件)

Models.User user = new Models.User
{
   Id = 1,
   Email = newEmail@site.com,

};
  await App.Database.UpdateUser(user);

SQLITE 方法

public Task UpdateUser(User user)
{
  return database.UpdateAsync(user);
}

更新后。 NOW 数据库中的字段值

Id = 1,
Email = newEmail@site.com,
IsActiveSubscibe = false,
PurchaseToken = null,
AutoRenewing = false
IsActiveSubscibe = false,
DataTime = null

我想得到的结果

Id = 1,
Email = newEmail@site.com,
IsActiveSubscibe = true,
PurchaseToken = "sdsdsdsd",
AutoRenewing = true,
IsActiveSubscibe = true,
DataTime = DateTime.UtcNow

【问题讨论】:

  • 尝试先从数据库中获取该记录,然后编辑值并保存(更新)
  • 替代方法 - 直接与数据库对话:update Users set Email=@newEmail where Id=@id; @newEmail 设置为 newEmail@site.com@id 设置为 1(可选:返回一些内容以指示行是否已更新与否)

标签: c# sqlite xamarin.forms


【解决方案1】:

在这里你正在创建一个新对象

Models.User user = new Models.User
{
   Id = 1,
   Email = newEmail@site.com,

};

只有 2 个值,Id 和 Email。所有其他字段将设置为默认值:大多数对象为 null,布尔为 false

所以无论你以前有什么信息,它都会被替换。

先获取用户(我用的是ID,但可以是其他字段)然后修改。

Models.User userToModify= await App.Database.GetUserById(1);
userToModify.email= newEmail@site.com;
await App.Database.UpdateUser(userToModify);

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 2017-09-10
    • 2019-09-12
    • 2018-01-09
    • 2015-02-22
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多