如何区分 sqlite-net 中的 NULL 数据和 0?

How to differenciate between NULL data and 0 in sqlite-net?

我正在使用 Xamarin 开发 iOS 应用程序。我正在使用 sqlite-net ORM 与我的数据库进行交互。

对于整数列,ORM return 是一个 Int32 值。但是,此列中的值可以是 NULL。我注意到如果是这种情况,它将 return 0 而不是 NULL 因为不可能将 int 设置为 NULL.

例如,使用以下代码:

public class Client
{
    public Client ()
    {
    }

    [PrimaryKey, Column("ID")]
    public string ID{ get; set;}

    public string FirstName{ get; set;}
    public string LastName{ get; set;}
    public int    Age{ get; set;}
}

如果 ID 正确,但 FirstName、LastName 和 Age 设置为 NULL,returned 对象的 FirstName 和 LastName 字段将为 null,这是合乎逻辑的。但是年龄将被设置为零。 所以我不知道该值是 NULL 还是真的 0。有没有办法区分这些情况?

理想情况下,您的客户 class 告诉我们 "Age" 是不可为 null 的 属性。但是这里要认识到的重要一点是 "Age" 作为一个整数,实际上是一个值类型。

值类型不能包含空值。除非结合“?”或已经指出的 "Nullable<>"。

在 .NET 中,字符串实际上不是值类型而是引用类型。

星期四,这就是为什么您在字符串属性上得到空值而不是在整数 属性 上得到空值的原因。

另一件需要注意的事情是,SQLite.NET 默认情况下会创建可为空的列,为了强制一个不可为空的列,请在 属性 上方添加属性:[NotNullAttribute]。

允许 "Age" 作为空值从数据库返回的唯一原因是编写以下属性:

public class Client
{
public Client ()
{
}

public Nullable<int> Age{ get; set;}
//public int? Age { get; set; }
}