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 プロパティをどのように宣言すればよいでしょうか。

もう 1 つ質問があります。プロパティを宣言し、それを非 null として指定した場合

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

次に、CreateTable() を呼び出すと、「Not Null 属性にデフォルト値が指定されていません」というエラーが表示されます。

コンストラクターでこのプロパティを初期化しようとしましたが、うまくいきませんでした。

これらの問題にどう対処すればよいですか?助けてください

4

1 に答える 1

2

SQLite Docsを見る限り、SQLiteのビットデータ型はありません

そしてSQLite.Netでは、あらゆる種類のバイト/ブール値/整数が整数にマップされます:この行を参照してください

NotNull エラーについては、次のように推測できます。

  • テーブルにはすでにいくつかのエントリがあります
  • NotNull-Attribute を使用して新しい列を追加します
  • SQLite がタブレットを変更しようとするとクラッシュします。これは、新しい列に null 値を持つ複数のエントリがあるためです。

これは、この順序でテーブルを変更する必要がある唯一の状況だと思います:

  • 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 に答える