SQLite.Net,C#相当于SQLite的bit数据类型(SQLite.Net, C# equi

2019-10-21 16:55发布

我宣布继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属性来获取与位为数据类型的列。

我有一个问题 ,如果我财产申报,并指定其为NOT NULL

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

然后,它给了我一个错误,当我调用CREATETABLE()说,“不空属性没有指定默认值”。

我试图在构造函数初始化此属性,但它没有工作。

我该如何去对这些问题? 请帮忙

Answer 1:

据我在SQLite的文档看有SQLite的无位数据类型

在SQLite.Net各类字节/布尔/整数的映射为整数:看到这条线

对于NOTNULL错误,让我猜:

  • 你在你的表已经有一些条目
  • 现在添加一个新列NOTNULL属性
  • 的SQLite试图改变平板电脑和崩溃,因为多个条目,其中新列现在已经空值

我认为这是唯一的情况下不得不改变表顺序如下:

  • 添加列没有NOTNULL
  • 添加一些列的值
  • 只有一次所有的表项有此列的值 - >现在你可以添加NOTNULL属性

如果你的表是空的,则NOTNULL参数会从一开始就工作。


编辑简单的解决方案:

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

await conn.CreateTableAsync<Employee>();


文章来源: SQLite.Net, C# equivalent for SQLite bit datatype