1

使用 ExecuteQuery 取得了一些成功,即 AccessRights 是我的 dto 并且 queryString 包含“Exec sp_name param1,param2 etc”

  var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

如果从存储过程返回的内容可以完美地映射到我在通用 ExecuteQuery 中传递的类型 (dto),那么一切都会完美运行

问题是现在我有一个返回非标准列名的存储过程。

基本上我有我的 AccessRights 类 (dto),其中包含“userId”、“accessRightId”、“描述”

但新的存储过程返回 UserId、AccessRightId、“TemporaryDescription”。

现在我不能改变它,因为其他事情取决于它......如果我这样做

 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

然后我看不到“TemporaryDescription”,我认为这是合乎逻辑的,因为它不存在

我需要做的是将临时描述映射回描述。

任何机构都知道如何做到这一点?

4

1 回答 1

0

您可以尝试添加[Column(...)]属性;不知道这是否可行。

脑海中浮现的几个选项:

  • 构建一个映射 1:1(按名称)的类然后将此数据(通过Select或 LINQ 查询)转换为您的实际预期类
  • 编写一个重命名列的包装器 SP(不好;您需要一个临时表,可能由于 DDL/DML 交错而强制重新编译)
  • 将 SP 拖到数据上下文设计器上并在生成的类型中手动重命名列(将此视为第一个项目符号的自动实现)
  • 将 SP 的有趣部分移动(重构)到可以从现有 sp 调用的 UDF,并直接从数据上下文中使用 UDF(将 UDF 拖到设计器上)
于 2009-09-21T15:30:32.113 回答