linq2sql:当返回的行不在我的dto中时使用ExceuteQuery <dto>?我可以使用通用数据类型吗?</dto>

时间:2009-09-21 15:13:59

标签: c# linq-to-sql stored-procedures executequery

一直在使用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”,“Description”

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

现在我不能改变它,因为其他东西依赖它...如果我做

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

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

我需要做的是将temporaryDescription映射回说明。

任何团体都知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

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

有些选择让人想到:

  • 构建一个执行映射1:1(按名称)的类,然后将此数据(通过Select或LINQ查询)转换为实际意图班级
  • 编写一个重命名列的包装器SP(不太好;你需要一个临时表,大概是因为DDL / DML交错而强制重新编译)
  • 将SP拖到数据上下文设计器上,并在生成的类型中手动重命名列(将其作为第一个项目符号的自动实现)。
  • 将SP的有趣部分移动(重构)为可以从现有sp调用的UDF,并直接从数据上下文中使用UDF(将UDF拖到设计器上)