我试图主要在这个领域决定2 ORM的利弊。
另外,我并不关心OSS与专业论证。团队没有时间窥视引擎盖并开始搞乱其他人的代码。我更关心“它只是工作”的角度而不是其他任何东西。
答案 0 :(得分:10)
虽然我在another question中写过其中一些问题,但我认为值得逐一回答这一问题。
简而言之:NH更灵活,表现更好,更容易实现。 EF具有更好的迁移支持,更简单的学习曲线和更完整的LINQ提供程序。
答案 1 :(得分:8)
首先,我更喜欢NHibernate的各个方面。实体框架也在版本5.0中遗漏了一些内容。
最后,使用NH更容易实现DDD模式,因为映射更灵活。
答案 2 :(得分:6)
你可以使用bltoolkit;) - > http://www.bltoolkit.net/Doc.Linq.ashx
只需2分钟即可阅读 - > http://www.bltoolkit.net/Doc.LinqModel.ashx
但总之
btw它的确是3,它有属性TableFunction& TableExpression支持表值UDF,提示和其他表格装饰。 因此,您可以编写自己的扩展方法以在Linq语句中使用 例如
[TableExpression("{0} {1} WITH (TABLOCK)")]
public Table<T> WithTabLock<T>()
where T : class
{
return _ctx.GetTable<T>(this, ((MethodInfo)(MethodBase.GetCurrentMethod())).MakeGenericMethod(typeof(T)));
}
然后
using (var db = new TestDbManager())
{
var q =
from p in new Model.Functions(db).WithTabLock<Parent>()
select p;
q.ToList();
}
示例DML操作
db.Employee
.Where(e => e.Title == "Spectre")
.Set(e => e.Title, "Commander")
.Update();
答案 3 :(得分:1)
你不需要其中任何一个。您无法指定任意表提示,并且它不会像您希望的那样灵活。
如果所有这些都是要求,那么这个星球上就没有符合它们的ORM。
编辑:
根据您的评论。 nHibernate将为您提供最大的功能,但代价是设置模型的复杂性增加。有一些工具可能有所帮助,但每个工具都有它的优点和缺点。
EF更易于配置和使用,但功能较弱。 nHibernate则相反。你必须在权力和复杂性之间做出选择。
BTW,关于批量操作以及什么不是,您可以直接从框架发出SQL来进行此类操作。或者调用存储过程。答案 4 :(得分:1)
只是添加其他答案......
几天前,Ricardo Peres写了一篇关于NHibernate和Entity Framework的非常好的,无偏见的比较。它可能对你的研究有所帮助。