2

永続化されたアプリケーション用にテーブルをいつどこで作成する必要があるのか​​疑問に思っています。データベース接続ファクトリをGlobal.asax.csに登録しました。

container.Register<IDbConnectionFactory>(new OrmLiteConnectionFactory(conn, MySqlDialectProvider.Instance));

また、定義したクラスからテーブルを作成するには、OrmLiteAPIを使用する必要があることも理解しています。たとえば、Userクラスを作成するには、次のようにします。

    public class User
    {
        [AutoIncrement]
        public int Id { get; set; }

        public string Name { get; set; }

        [Index(Unique = true)]
        public string Email { get; set; }

        public string Country { get; set; }

        public string passwordHash { get; set; }

        public DateTime Dob { get; set; }

        public Sex Sex { get; set; }

        public DateTime CreatedOn { get; set; }

        public Active Active { get; set; }
    }

私は以下を実行します:

Db.CreateTable<User>(false);

作成する必要のあるテーブルがたくさんあります。このようにすべてのテーブルを最初に作成した別のクラスを作成するか、またはへの各REST呼び出しでそれを実行する必要がありUserServiceます。

また、データベースにすべてのテーブルを直接作成し、各テーブルに対応するクラスの名前を付けると、Ormがクラスを既存のテーブルに自動的に照合することもできますか?

申し訳ありませんが、これは少し混乱しています。あなたが私に与えることができるどんな助けにも感謝します。

4

2 に答える 2

3

AppHost.Configure()リクエストが処理される前に完了することが保証されているスタートアップの単一のメインスレッドによってのみ実行されるでそれらを作成します。

必要に応じて、リフレクションを使用して作成する必要のあるすべてのタイプを検索し、非汎用APIバージョンを呼び出すことで、これをある程度自動化できます。

db.CreateTable(overwrite:false, typeof(Table1));
db.CreateTable(overwrite:false, new[] { typeof(Table1), typeof(Table2, etc });
于 2013-03-07T21:31:55.757 に答える
2

データベースにすべてのテーブルを直接作成し、各テーブルに対応するクラスの名前を付けると、Ormはクラスを既存のテーブルに自動的に照合することができますか?

テーブルを作成するためにOrmLiteを使用する必要はありません。テーブルがMySQLデータベースにすでに存在する場合(またはMySQLインターフェイスを使用して作成する場合)、クラス名がテーブル名と同じである限り、テーブルにアクセスできます。テーブル名がクラス名と一致しない場合は、Alias属性 を使用してください

[Alias("Users")] //If table name is Users
public class User
{
    public int Id {get;set;}
}

私はあなたのサービスにテーブルを作成しません。一般的にはAppHost.Configure method、アプリケーションの起動時に実行されるようにします。これを行うと、アプリケーションが開始されるたびにテーブルの作成が試行されるため(1日1回の場合もあります。ここを参照)、テーブルの作成をチェックするために構成ファイルにフラグを設定することをお勧めします。

于 2013-03-07T21:47:29.273 に答える