1

私はこれに少し慣れていません。https://github.com/praeclarum/sqlite-net/blob/master/examples/Stocks/Stocks.csを使用して SQLite-net dealio を使用したかった

それは、私がこのコードを入手した正確な ecample です。私は、自分のモデルを非常に迅速かつクリーンに宣言できるというアイデアが気に入っています。

しかし、私はこれを実行しました。それが示唆するように appdelegate クラスからこれを呼び出す場合、これが実行されるたびに新しいデータベースとすべてを作成するかどうか疑問に思っています。

new _db = new Database();

それが app デリゲート クラスで使用されているもので、私は少し驚いています。持続するデータが必要です。これが毎回再作成されるかどうか、もしそうならデータベースを作成する方法、私のモデルクラスからテーブルを作成し、一度だけ作成される通常のdbファイルを介してそれらを永続化する方法を教えてください。

どんな助けでも大歓迎です!

public class Database : SQLiteConnection
{
    public Database (string path) : base(path)
    {
        CreateTable<Stock> ();
        CreateTable<Valuation> ();
    }
    // more code here
}
4

3 に答える 3

3

CreateTable() メソッドは、(まだ存在しない場合) テーブルを作成しますが、テーブルに既に存在するデータを破壊することはありません。

于 2013-02-14T13:49:57.893 に答える
1

私はこれを少しいじりました。答えは、それらのテーブルが存在しない場合、それらのテーブルを作成するということです。

SQLiteConnectionを使用してこの方法でデータベースを作成する代わりに、 を使用しsqliteconnectionてデータベースが存在するかどうかを確認する方が簡単です。次に、db ファイルが存在しない場合にテーブルを構築するメソッドを用意します。以下にコードサンプルがあります。

これにより、MVC モデル アプローチを使用してすべてのクラスを作成し、https://github.com/praeclarum/sqlite-netライブラリを利用しながら、実際の SQL ステートメントを使用せずにプログラムで db を構築できます。

public class Database
{
    static string documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
    // I do this so I can access the path without having to create an instance of the datbase class
    public static string db = Path.Combine (documents, "dbAwesome.db");
    static bool exists = File.Exists(db);

    public void GetConnection()
    {
        if (!exists) {
            SqliteConnection.CreateFile (db);
            // Custom methods to create initial tables and values for tables
            CreateMyTables ();
            InsertDefaultValues ();
        }
    }
}
于 2013-02-14T00:55:08.347 に答える