C# 数据访问层策略

C# 数据访问层策略,c#,nhibernate,enterprise-library,C#,Nhibernate,Enterprise Library,我有一个关于微软企业图书馆数据访问应用程序块和NHibernate的问题 我们正处于反洗钱软件的设计阶段 标准如下: 我们有Customer类,它包含一对多关系中的Account类。模型如下: 客户1->M账户 这些类的定义如下: class Customer { private: int CustomerID; string CustomerName; List<string> Addresses; List<Acco

我有一个关于微软企业图书馆数据访问应用程序块和NHibernate的问题

我们正处于反洗钱软件的设计阶段

标准如下:

我们有Customer类,它包含一对多关系中的Account类。模型如下: 客户1->M账户

这些类的定义如下:

class Customer 
{ 
   private:
      int CustomerID;
      string CustomerName;
      List<string> Addresses;
      List<Account> accounts; 
} 

class Account 
{ 
   private:
      long AccountNumber;
      List<Transaction> transactions; 
      Customer customer;
} 
Table Customer
{
      int CustomerID;
      string CustomerName;
}

Table CustomerAddress
{
      int CustomerID;
      int Seqn;
      string Address;
}

Table Account 
{ 
      long AccountNumber;
      int CustomerID;
} 
我们决定使用MSEL或NHibernate设计数据访问层。所以你能告诉我:

  • 这两种策略的优缺点是什么
  • 我们应该将NHibernate与MSEL结合起来吗
  • 我们是否应该使用MSEL采用我们自己设计的基于ORM的策略
  • 还是您的技术架构师提供的其他策略

  • 请在这方面帮助我:哪种策略最好?或者提供任何其他策略。请给出你的理由。

    这是一个相当宽泛的问题,没有多大意义,因为这是比较苹果和桔子的问题,但我将尝试回答其中一些问题:

  • NHibernate是一个ORM,MSEL是一组框架,这是两个最大的区别。NHibernate只需要创建一些POCO和xml文件来生成DAL。在MSEL中使用数据应用程序块时,您必须键入DAL的所有代码或使用第三方代码生成工具,如

  • 将它们结合在一起是一种可能性,但对于数据应用程序块来说可能没有必要,您实际上只需要使用其中一个,NHib允许您执行存储过程,因此,如果在c#本身中存在无法执行的操作,您可以始终将其移动到SP。至于其余的块(加密、日志、异常等)在MSEL中,您当然可以将它们与NHibernate一起使用

  • 设计你的ORM是一个非常糟糕的主意,除非你有一个庞大的团队能够正确地完成它,即使这样,如果你缺少一些功能,我也会修改现有的开源ORM

  • 如果你能负担得起的话,我会选择NHibernate


  • 你试过谷歌吗?也许把你目前发现的东西发出来了……有什么原因你把这个问题发了两次吗?……或者是因为堆栈溢出错误?我建议你看看LLBLGen。@Mitch Wheat,这可能只是个意外。这是常有的事。