2010-05-04 95 views
0

實體框架與NHibernate SchemaExport是否存在等價關係?NHibernte SchemaExport的實體框架等效

鑑於我有一個工作的實體模型,我想編程初始化一個數據庫。

我想在設置我的集成測試時使用此功能。

爲實體模型創建匹配的DDL也足夠了。

+0

儘管我給出的答案是設置數據庫的工作,但我建議在測試中使用'TransactionScope',而不是將其存儲在測試類的專用字段中。在每個測試的設置中,您打開事務範圍(我通過分配一個'new'實例來完成),並在拆卸過程中執行回滾。 – 2010-05-04 13:17:51

回答

3

是 - 給你與實體框架的工作(這是容易混淆的是,第二個版本......)

編輯:這是僅EF4做到這一點的方式。在我以下的原文中描述瞭如何使用EF CTP3中的純代碼方法完成同樣的事情。

如何:出口型數據庫在EF4
導出模型數據庫,在設計師的任意位置單擊鼠標右鍵(如果你沒有一個實體)並選擇「從模型生成數據庫.. 。「並按照嚮導中描述的步驟操作。瞧!


原帖,瞄準EF4 CTP3和代碼,只有:這是代碼,我在一個小設置實用程序使用。

var builder = new ContextBuilder<ObjectContext>(); 

// Register all configurations you need here 
builder.Configurations.Add(new EntryConfiguration()); 
builder.Configurations.Add(new TagConfiguration()); 

var conn = GetUnOpenedSqlConnection(); 
var db = builder.Create(conn); 

if (db.DatabaseExists()) 
{ db.DeleteDatabase(); } 

db.CreateDatabase(); 

works on my machine(雖然我在這裏已經簡化爲簡潔......一點點),所以如果事情不工作,那是因爲我過於簡單化。

請注意,正如TomTom所說,您只會獲得基本知識。但即使您有更復雜的模式,它也非常有用 - 您只需手動編寫DDL即可將複雜的內容添加到生成的數據庫模式中。

+0

似乎ContextBuilder實際上不是EF4的一部分,而只是Microsoft ADO.NET實體框架功能社區技術預覽版3的一部分。這是否正確? 此外,上述方法僅適用於「僅限代碼」方法,是嗎?或者有沒有用ContextBuilder註冊現有Model.edmx的方法? – jbandi 2010-05-04 22:39:59

+0

@jbandi:沒錯,這是CTP。但是,在設計師中完成同樣的事情甚至更容易。看我的編輯。 – 2010-05-05 01:08:08

+0

謝謝! 但是我意識到通過設計器的導出功能,但這不是我正在尋找的,我正在尋找一個編程解決方案... 我會將您的答案標記爲 – jbandi 2010-05-05 05:57:06

-1

沒有,並認真我不知道爲什麼nhibernate麻煩有這個。

問題是:O/R映射器的數據庫信息量少於非平凡設置所需的信息量。

缺少有:

  • 指數,完全配置
  • 有關服務器側約束,觸發器(是的,可能有一些)
  • 約像表空間超過元件對象分佈信息信息
  • 關於權限的信息

我真的很喜歡測試方法(請檢查一下da tabase對於你所知道的所有對象來說已經足夠了),但是一代人非常棘手 - 在那裏完成了。您需要在ORM中進行一些嚴格的附加註釋才能生成合理的索引。

+0

所有有效的點,但這也許應該被添加爲原始問題的評論,而不是作爲答案,僅僅因爲這不能回答原來的問題,這是值得記住的。 – 2013-09-05 10:37:29