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

Al *_*ath 4 c# sql entity-framework

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

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();
Run Code Online (Sandbox Code Playgroud)

Ham*_*ami 6

确保许可证属性的名称与从select中获取的列相同,并且属性类型也相同。

像这样:

Select CustomerId,Firstname from Customers

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

      public string Firstname {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

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

我经常使用这种方法,对我来说效果很好。


D S*_*ley 6

基于这个问题,null如果结果集的第一列是EF(至少在某个时刻)似乎返回对象null。因此,*您应该显式命名列并确保 PK(或其他列)位于第一位,而不是选择。


小智 5

就我而言,它不起作用,因为我没有将字段作为属性。一旦我将字段转换为属性,它就工作得很好。