使用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();
答案 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)
在我的情况下它没有用,因为我没有字段作为属性。一旦我将字段转换为属性,它就可以正常工作。