2010-05-04 71 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