2013-03-07 45 views
2

我只是想知道應該爲持久化應用程序創建何時和何處表。我已經註冊了我的數據庫連接工廠的Global.asax.cs:在哪裏創建MySql表ServiceStack&OrmLite

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

是有可能創造我所有的直接在我的數據庫表中,用相應的類命名每個表,然後Orm會自動將類與現有表匹配?

您不必使用OrmLite創建表格。如果這個表已經存在於你的MySQL數據庫中(或者你想使用MySQL接口創建),只要類名與表名相同,就可以訪問它們。如果表名稱不匹配的類名,使用Alias屬性

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

我不會在你的服務創建表。通常,我會在應用程序啓動時運行的AppHost.Configure method中執行此操作。這樣做會嘗試在每次啓動應用程序時創建表(可能每天一次 - 請參閱here),因此您可能需要在配置文件中設置一個標誌來檢查是否創建表。

+0

很好的答案。非常感謝你。 – gimg1 2013-03-07 22:44:00

3

我會在AppHost.Configure()中創建它們,它只能在啓動時由單個主線程運行,並且保證在任何請求被提供之前完成。

如果你想,你可以在一定程度通過使用反射來找到所有需要創建的類型並調用非通用版本的API自動完成:

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

你的支持是非常好的,因爲一直非常感謝你。希望當我獲得更多經驗時,我可以以某種方式回饋。 – gimg1 2013-03-07 22:44:49

+0

np :)無論如何,你的貢獻(例如答案,wiki文檔,博客文章等)將非常受歡迎! – mythz 2013-03-07 22:56:42