1

我在 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 属性以获取以位为数据类型的列。

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

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

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

我试图在构造函数中初始化这个属性,但是没有用。

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

4

1 回答 1

2

据我在 SQLite Docs 中看到的,SQLite 没有位数据类型

在 SQLite.Net 中,所有类型的字节/布尔值/整数都映射到整数:见这一行

对于 NotNull 错误,让我猜猜:

  • 您的表中已经有一些条目
  • 您现在添加一个带有 NotNull-Attribute 的新列
  • 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>();
于 2015-01-29T10:45:28.657 回答