【发布时间】:2013-01-31 16:02:06
【问题描述】:
我正在开发一个使用现有数据库的应用程序,该数据库只能通过存储过程进行访问。大多数这些 SP 从多个表返回列。
我们有一个数据访问层,它从我们的域对象层返回类型的对象。但是,由于 SP 从多个表返回列,我不确定应该如何构造我的域对象,因为它们中的大多数不会“自然地”映射到从 SP 返回的数据。
示例:
存储过程从“员工”表和“经理”表返回列:
-EmployeeId
-名字
-姓
-ManagerEmployeeId
-ManagerFirstName
-ManagerLastName
我是否应该创建一个包含与上述列完全匹配的属性的域对象“EmployeeWithManager”?
我是否应该创建某种包含 Employee 对象和 Manager 对象的“数据访问对象”?
很遗憾,不能使用 ORM、参数化查询或更改存储过程。
【问题讨论】:
-
我不明白你所说的使用 ORM 是什么意思,参数化查询不是一个选项?我只会创建 Manager 和 Employee 对象,因为域对象应该与域匹配。如果要获取员工,则调用 SP 并仅使用结果的员工部分,如果要获取经理,则调用 SP 并仅使用结果的经理部分。
-
@john 我的意思是我工作的公司不想使用 ORM 或参数化查询,而且我无法进行此更改。我必须通过现有的 SP 访问数据库。我意识到域对象应该与域匹配。我喜欢你的方法,但如果我在程序的特定部分需要员工和经理,我必须用相同的参数调用同一个 SP 两次。我更愿意获得整个结果,然后将其映射到我的域对象以避免两次往返。
标签: c# sql sql-server stored-procedures