SQLite.Net,C#等效于SQLite位数据类型

时间:2015-01-29 06:57:01

标签: c# sqlite windows-runtime winrt-xaml sqlite.net

我在c#

中声明了以下课程
[Table("Employee")]
public class Employee
{
    [PrimaryKey,AutoIncrement]
    public int EmployeeId { get; set; } 
    public DateTime DateOfJoining { get; set; }
    public string Address{ get; set; }
}

我调用此方法在我的SQLite数据库中创建等效表

public async Task CreateTable()
{
   SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
   await conn.CreateTableAsync<Employee>();
}

因此它在SQLite中创建了一个表,如下所示

[EmployeeId] int,
[DateOfJoining] [datetime],
[CallType] [varchar]

我想要创建一个列,它是位

[IsActive] [bit]

为此,我尝试了

public bool IsActive { get; set; } 

public Boolean IsActive { get; set; }

这两个属性都会产生一个整数

的列
[IsActive] integer

那么我应该如何声明我的IsActive属性来获取一个bit为数据类型的列。

我还有一个问题,如果我声明属性并将其指定为非null

[NotNull]
public bool Address{ get; set; }

然后当我调用CreateTable()说“没有为Not Null属性指定默认值”时,它给出了一个错误。

我尝试在构造函数中初始化此属性,但它没有用。

如何处理这些问题? 请帮忙

1 个答案:

答案 0 :(得分:2)

到目前为止,我在SQLite Docs中看到SQLite没有位数据类型

在SQLite.Net中,所有类型的byte / boolean / ints都映射到整数:请参阅this line

对于NotNull错误,我猜:

  • 您的表格中已有一些条目
  • 您现在添加一个包含NotNull-Attribute
  • 的新列
  • SQLite尝试更改平板电脑并崩溃,因为新列现在具有空值的多个条目

我认为这是唯一需要按此顺序更改表格的情况:

  • 添加没有NotNull的列
  • 添加一些列值
  • 只有所有表条目都具有此列的值 - &gt;现在您可以添加NotNull属性

如果您的表为空,则NotNull参数从一开始就可以正常工作。


编辑更简单的解决方案:

  • 添加没有NotNull的列
ALTER TABLE Employee ADD COLUMN IsActive integer default 0; 
  • 现在您可以添加NotNull属性并再次调用CreateTable
[NotNull]
public bool Address{ get; set; }

await conn.CreateTableAsync<Employee>();