C# 在EntityFramework和NHibernate之间切换
我正在实施一个学院项目,以测试Entity Framework 4.0与NHibernate(最新版本)的性能。我正在构建一个简单的事务处理系统来做这个测试。我的实体将是客户、账户、订单、产品等 我想创建两个独立的DAL;第一个DAL将是EntityFramework,而第二个DAL将是NHibernate。然后,我将创建一个引用一个DAL或另一个DAL的业务逻辑层(BLL),并使用它进行测试。BLL将包括诸如“insertNewOrder()”、“amendExistingOrder()”等方法。我希望我的BLL独立于框架,以便可以轻松地在每个DAL之间切换 为了实现这一点,我建议实现一个接口“IContext”,该接口将由每个DAL实现。“IContext”将包括每个实体的“get()”方法以及“Save()”方法。然后,每个DAL将以自己的特定方式实现这些方法。“get()”方法将返回IOObjectSet,而不是ObjectSet 我将使用T4模板从我的EDM创建POCO实体,并将其移动到单独的项目中。然后,每个DAL可以引用同一组POCO实体 然后,我的BLL将创建IContext接口的实例并在该接口上调用方法,而不是创建特定的上下文(ObjectContext或ISession) 这听起来是一个可行的解决方案吗?我找到的关于这个主题的任何文章都包括存储库的使用,我不完全理解这个模式,如果可能的话,我希望避免实现它。我的重点是测试每个平台,而不是构建架构正确的应用程序。例如,请参见此处:C# 在EntityFramework和NHibernate之间切换,c#,.net,nhibernate,frameworks,entity,C#,.net,Nhibernate,Frameworks,Entity,我正在实施一个学院项目,以测试Entity Framework 4.0与NHibernate(最新版本)的性能。我正在构建一个简单的事务处理系统来做这个测试。我的实体将是客户、账户、订单、产品等 我想创建两个独立的DAL;第一个DAL将是EntityFramework,而第二个DAL将是NHibernate。然后,我将创建一个引用一个DAL或另一个DAL的业务逻辑层(BLL),并使用它进行测试。BLL将包括诸如“insertNewOrder()”、“amendExistingOrder()”等方
我部分基于Julia Lerman的“编程实体框架第二版”中的一章。我对NH和EF(特别是NH)都是新手,因此任何建议都将不胜感激。谢谢 您要查找的是存储库模式。请参见(在许多其他位置中)作为示例 存储库模式背后的理念是为数据访问创建接口,例如:
public interface IAddressRepository
{
Address GetById(int id);
}
然后创建该接口的两个实现:一个用于实体框架,另一个用于NHibernate
最后,创建一种机制,以基于接口获得所需的实现。像这样的IoC容器在这方面非常出色。您正在寻找的是存储库模式。请参见(在许多其他位置中)作为示例 存储库模式背后的理念是为数据访问创建接口,例如:
public interface IAddressRepository
{
Address GetById(int id);
}
然后创建该接口的两个实现:一个用于实体框架,另一个用于NHibernate
最后,创建一种机制,以基于接口获得所需的实现。像IoC这样的容器在这方面很好。如果您想测试性能,您不应该创建中间层。在这两种情况下,使用具有相同输入/输出的原始代码,但仅此而已 在这两种情况下,创建中间层将限制您使用最小分母。通过分别实现这两个相互竞争的部分,您可以针对一种技术进行优化和具体实现,这在同一访问层中是不可能做到的
此外,您的任务不是创建相同的DAL,而是测试性能。所以,在尝试其他方法之前,您应该首先开始考虑这两种技术中的优化和特殊情况。如果您想测试性能,您不应该创建中间层。在这两种情况下,使用具有相同输入/输出的原始代码,但仅此而已 在这两种情况下,创建中间层将限制您使用最小分母。通过分别实现这两个相互竞争的部分,您可以针对一种技术进行优化和具体实现,这在同一访问层中是不可能做到的
此外,您的任务不是创建相同的DAL,而是测试性能。因此,在尝试其他技术之前,您应该首先开始考虑这两种技术的优化和特殊情况。请查看。将您的结果与之进行比较可能会很有趣。他们还描述和讨论测试,这可以给你更多的想法:检查。将您的结果与之进行比较可能会很有趣。他们还描述和讨论了测试,这可以给你更多的想法:谢谢你的回复。我想现在我会继续我的中间层方法。我很高兴将项目的范围限制在当应用于特定场景(本例中的事务处理系统)时框架在(相对)默认配置中的执行方式上。一位主管建议我确保比较同类,而且这些都是相当重要的框架。如果我分开看,我可能会有太多的材料,永远不会完成!谢谢你的回复。我想现在我会继续我的中间层方法。我很高兴将项目的范围限制在当应用于特定场景(本例中的事务处理系统)时框架在(相对)默认配置中的执行方式上。一位主管建议我确保比较同类,而且这些都是相当重要的框架。如果我分开看,我可能会有太多的材料,永远不会完成!