DAL设计与指导

时间:2014-02-22 08:00:02

标签: c# database data-access-layer

我需要一些关于创建DAL的指导。我试图找到一些好的资源,但没有找到任何特定于我需要的东西。

我有一个稍微复杂的数据库布局,有一些一对多关系和一对多对多关系。我在网上看到的大多数文章参考实体框架都有助于ORM,但遗憾的是我无法使用这个,因为我无法使用reflection / emit

目前,我有一个类完全代表我的数据库中的每个表。然后我有一个通用的存储库,所以我可以操作这些类。最重要的是,我有一个手动实现关系的另一层(服务层??)。一个客户可能有多个地址,因此Customer对象将具有一个地址列表。这是执行计算/操作的层。当对这些关系对象之一进行更改时,服务层处理转换为表对象并通过存储库提交更新。

几个问题:

  1. 这些图层的技术名称是什么?
  2. 是否称为DTO的表格表示和称为POCO的关系对象?
  3. 是否应该在存储库中完成从关系对象到表对象的转换,我称之为服务层,还是在步骤之间?
  4. 最后,我正在做的事情有意义吗?
  5. 非常感谢任何适用文章的链接。

    对缺乏代码表示歉意。当我下次在电脑上时,会用例子更新。

    编辑:要明确这是针对Windows Phone& winrt为本地sqlite数据库。我使用一个简单的orm将一个表映射到一个对象,但是,没有发射我不能有自动生成的复杂对象,因此我不得不在简单的表表示上创建另一个层来解释这个问题。

    此致

1 个答案:

答案 0 :(得分:0)

  

我有一个稍微复杂的数据库布局,有一些一对多关系和一对多对多关系。

啊,我有一个稍微复杂的菜单来做饭。鸡蛋和培根。

曾见过一个稍微复杂的数据库?让我们说200个tabbles,也许600个关系?请。一对一对多,一对多对多都是 - 但并不复杂。

  

我已经看过在线参考实体框架来帮助ORM但不幸的是我不能使用它,因为我不能   使用reflection / emit

鉴于.NET框架中包含一个稍微过时的实体框架版本 - 因此安装在GAC中并绕过安全性 - 为什么你认为它无法使用反射或发射?

现在回答:

1:没有。这些都没有层次。这就是你的ORM。我称之为数据访问和对象管理层。

2:当它们是退化的业务对象时,它们只被称为DTO - 没有逻辑(业务,不是数据访问)。否则显然他们不是数据访问对象。 NOw poco - 你甚至不知道这个词是什么意思吗?普通的旧C#对象 - 即不从基类继承。

3:取决于。

4:没有。你不使用反射/发射的论证很弱 - 这是一个温和的说法。你是你的头脑。我确实维持了商业ORM一段时间,在我生命中所做的所有事情中,这可能是最复杂的软件。有一个错误的做法,你太胖了恕我直言这样做,可能会做一个非常糟糕的情况,并花费大量的时间试图解决其他人已经解决的问题 - 没有任何实际的收获。动态sql生成会给你白色的heairs,或者只能处理非常基本的元素。你可以更好地花时间找出你不能使用反射或发出字节码的原因....

文章....嗯。请参阅我的参考手册:Scott Ambler的“构建对象应用程序” - 我相信您可以在互联网上找到它,例如在亚马逊。