DbContext.Database.SqlQuery返回一些空对象

时间:2014-06-26 16:14:53

标签: c# sql entity-framework

使用Entity Framework 6,下面的代码查询表(实际上是一个视图)并返回一些行数。行数是正确的,但是许多行都是null,即一些Licenses对象为null,如Visual Studio Watch窗口中所示。我认为发生的事情是,如果视图中给定行的任何列包含null,则整个行被设置为null。 关于如何获得所有正确数据的任何想法?

String query = "select * from dbo.v_Licenses where [Number] like '%ab%'";
System.Data.Entity.Infrastructure.DbRawSqlQuery<Licenses> dbRawSqlQuery = db.Database.SqlQuery<Licenses>(query);
Queryable<Licenses> licenses = dbRawSqlQuery.AsQueryable();

3 个答案:

答案 0 :(得分:4)

确保许可属性的名称与从select和属性类型提取的列完全相同。

像这样:

Select CustomerId,Firstname from Customers

public class Customer
{
      public int CustomerId{get;set;}

      public string Firstname {get;set;}
}

并将System.Data.Entity.Infrastructure.DbRawSqlQuery更改为List

我经常使用这种方法,对我来说非常好。

答案 1 :(得分:4)

基于this question,如果结果集的第一列为null,则EF(至少在某一点)似乎返回null个对象。因此,选择*时,您应该明确命名列,并确保PK(或其他列)是第一个。

答案 2 :(得分:4)

在我的情况下它没有用,因为我没有字段作为属性。一旦我将字段转换为属性,它就可以正常工作。