【问题标题】:linq2sql: using ExceuteQuery<dto> when rows returned are not in my dto? Can i use a generic data type?linq2sql:当返回的行不在我的 dto 中时使用 ExceuteQuery<dto>?我可以使用通用数据类型吗?
【发布时间】:2011-03-24 18:26:20
【问题描述】:

使用 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”,我认为这是合乎逻辑的,因为它不存在

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

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

【问题讨论】:

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


    【解决方案1】:

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

    脑海中浮现的几个选项:

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

    【讨论】:

    • 嗨,马克,不,这不能解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2019-05-01
    相关资源
    最近更新 更多