2

我只是想知道应该在何时何地为持久化应用程序创建表。我已经在 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 会自动将类与现有表匹配?

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

4

2 回答 2

3

我将在其中创建它们,AppHost.Configure()它仅由 Startup 上的单个主线程运行,该主线程保证在提供任何请求之前完成。

如果您愿意,您可以通过使用反射来查找所有需要创建的类型并调用非泛型 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在应用程序启动时运行它。这样做将在每次启动应用程序时尝试创建表(可能每天一次 - 请参见此处),因此您可能希望在配置文件中设置一个标志来检查创建表。

于 2013-03-07T21:47:29.273 回答