如何区分 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; }
}
我正在使用 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; }
}