【问题标题】:Entity framework sqlquery实体框架sqlquery
【发布时间】:2013-10-18 07:01:09
【问题描述】:

我阅读了有关使用实体框架查询数据库的信息

var result = _dbContext.SqlQuery<string>(sql, someParamSqlParameter).ToList();

如果我想要返回多个列,我该如何编写这种类型的查询。 我试过这段代码,但它给出了一些 sql 模式映射错误

var result = clsGlobalObjectRefrances.SchoolSoulController.Stt.Database.SqlQuery<LocalAccGroups>(sqlQuery).ToList();
var sqlQuery = "Select GroupId,GroupName,Level from cte_AccGroups";

LocalAccGroups 是我创建的一个类

class LocalAccGroups
    {
        public decimal GroupId { get; set; }
        public string GroupName { get; set; }
        int Level { get; set; }
    }

提前谢谢xxx

【问题讨论】:

  • 您的查询返回的列是什么?如果它返回 Level,那么您应该在您的班级中将其标记为 public
  • 在数据库中发布您的查询和表的定义非常重要。您的查询返回的列名和类型需要与您将它们反序列化到的对象相同。
  • 为什么你不只是尝试做 var result = _dbContext.SqlQuery(sql, someParamSqlParameter).ToList(); !?
  • 好的,等一下,我正在编辑我的问题并给出我使用的查询
  • @Habib DBContext.SqlQuery 和 Database.SqlQuery 有什么不同吗?

标签: c# sql database entity-framework querying


【解决方案1】:

您的查询也返回了Level,并且您还没有将您班级中的Level 属性标记为公开。将您的财产标记为公开的,它应该是好的。还要确保数据类型与查询返回的数据类型相匹配。将GroupId 设为十进制类型似乎很奇怪。

class LocalAccGroups
{
    public decimal GroupId { get; set; }
    public string GroupName { get; set; }
    public int Level { get; set; }
}

【讨论】:

  • 类也应该是公开的?
  • 那么我应该将 groupId 声明为什么
  • @BassamAlugili,如果类和查询都在同一个命名空间中,则不是。
  • @MurtazaMunshi,检查数据库中的数据类型,转到表,列定义,你会看到GroupId的数据类型,很可能是int类型
  • 是的,我检查了它的数字(18,0)。我尝试了您刚刚建议的代码,但它给了我这个错误:指定的架构无效。错误:CLR 类型到 EDM 类型的映射不明确,因为多个 CLR 类型与 EDM 类型“AccLedger”匹配。以前发现CLR类型'SchoolSoulLibrary.AccLedger',新发现CLR类型'Accounts.Method.AccLedger'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多