在哪里创建MySql表ServiceStack&OrmLite

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

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

我也明白,我需要使用OrmLite API从我定义的类创建表。 因此,例如创建我的用户类:

    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会自动将类匹配到现有表。

对不起,这让我有点困惑。 感谢你给与我的帮助。


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

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

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

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


我会在AppHost.Configure()创建它们,它仅在启动时由单个主线程运行,并保证在提供任何请求之前完成。

如果你想通过使用反射来找到所有需要创建的类型并调用非通用API版本,可以自动化这一点:

db.CreateTable(overwrite:false, typeof(Table1));
db.CreateTable(overwrite:false, new[] { typeof(Table1), typeof(Table2, etc });
链接地址: http://www.djcxy.com/p/65963.html

上一篇: Where to create MySql tables ServiceStack & OrmLite

下一篇: CSS changes unexpectedly when I open IE Developer Tools