在哪里创建MySql表ServiceStack& OrmLite

时间:2013-03-07 20:55:15

标签: servicestack ormlite-servicestack

我只是想知道应该为持久应用程序创建表的时间和位置。我在Global.asax.cs中注册了我的数据库连接工厂:

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

我也理解我需要使用OrmLite API从我定义的类创建表。例如,创建我的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);

我有很多需要创建的表。我应该创建一个单独的类,它首先创建我的所有表格,或者在每次休息调用UserService时执行它。

还可以直接在我的数据库中创建所有表,用相应的类命名每个表,然后Orm会自动将类与现有表匹配吗?

对不起,这让我有些困惑。谢谢你能给我的任何帮助。

2 个答案:

答案 0 :(得分:3)

我会在AppHost.Configure()创建它们,它只由Startup上的一个主线程运行,保证在任何请求被提供之前完成。

如果您愿意,可以通过使用反射来查找需要创建的所有类型并调用非通用API版本来自动执行此操作:

db.CreateTable(overwrite:false, typeof(Table1));
db.CreateTable(overwrite:false, new[] { typeof(Table1), typeof(Table2, etc });

答案 1 :(得分:2)

是否可以直接在我的数据库中创建所有表,用相应的类命名每个表,然后Orm会自动将类与现有表匹配?

您不必使用OrmLite来创建表格。如果MySQL数据库中已存在表(或者您希望使用MySQL接口创建),只要类名与表名相同,您就可以访问它们。如果表名与类名不匹配,请使用Alias属性

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

我不会在您的服务中创建表格。通常,我会在应用程序启动时运行的AppHost.Configure method中执行此操作。执行此操作将尝试在每次启动应用程序时创建表(可能每天一次 - 请参阅here),以便您可能希望在配置文件中设置标志以检查是否创建表。