LinqToSql - 显式构造实体类型' {0}'在查询中是不允许的

时间:2017-05-04 13:21:57

标签: c# .net linq-to-sql

我在两个简单的webapi方法上面临一个非常奇怪的问题:

我有很多用于从db中检索masterdata的方法。 它们都是类似的,它们都读取了具有相同结构的表格。

我真的不知道为什么这个方法有效:

这有效

[HttpGet]
//[Authorize]
[Route("offertsource/get")]
public IHttpActionResult api_MasterData_OffertSource_GET()
{
    var res = new List<mdOffertSource>();
    try
    {
        res = (from c in db.mdOffertSources.OrderBy(x => x.OffertSource)
               select new mdOffertSource() { idOffertSource = c.idOffertSource, Code = c.Code, OffertSource = c.OffertSource }).ToList();

        return Ok(res);
    }
    catch (Exception e)
    {
        return BadRequest(e.Message);
    }
}

这并不起作用:

不工作代码

[HttpGet]
//[Authorize]
[Route("offertstatus/get")]
public IHttpActionResult api_MasterData_OffertStatus_GET()
{
     var res = new List<mdOffertStatus>();
     try
     {
         res = (from c in db.mdOffertStatus.OrderBy(x => x.intOrder).ThenBy(x => x.OffertStatus)
               select new mdOffertStatus() { idOffertStatus = c.idOffertStatus, Code = c.Code, OffertStatus = c.OffertStatus }).ToList();

        return Ok(res);
    }
    catch (Exception e)
    {
        return BadRequest(e.Message);
    }
}

我有很多类似于第一个工作的方法,只有下面的第二个方法不起作用。

如果我测试它,我会收到此错误:

明确构建实体类型&#39; XionDB.mdOffertStatus&#39;在查询中是不允许的。

我已经尝试从dbml文件中删除表mdOffertStatus并再次添加但我面临同样的问题......

这很奇怪。

感谢支持

2 个答案:

答案 0 :(得分:1)

您的OfferSources表不为空,是吗?这将导致Select不被调用,并避免在第二种方法中抛出错误。

(将此作为评论,但没有足够的分数。)

答案 1 :(得分:0)

我通过删除dbml文件并再次添加来解决了我的问题......

在我尝试删除并再次添加表 mdOffertStatus 但没有任何更改之前,删除dbml并再次添加它修复了问题。

可能是解决方案中有些混乱...... 感谢支持