给予代码:FirstOrDefault引发的NullReferenceException
using (MyContext ctx = new MyContext())
{
// Returns true:
var any = ctx.AggregateListAnswers.Any();
// Throws NullReferenceException:
var fod = ctx.AggregateListAnswers.FirstOrDefault();
}
调用.FirstOrDefault()
抛出NullReferenceException
线,同时调用.Any()
回报true
行。
AggregateListAnswer
用于映射的定义如下:
modelBuilder.Entity<AggregateListAnswer>().ToTable("UccAggregate_ListAnswers");
后初始建立时,创建table is dropped, and an indexed view of the same name。视图中有大量数据。
什么可能导致这种情况?我如何解决NullReferenceException
的问题?
UPDATE
我可以解决此问题使用上具有相同属性的实体的投影,但没有[KeyAttribute]
属性:
var materialized = ctx.Set<AggregateListAnswer>
.Select(a => new AggregateListAnswerNoKey()
{
PropA = a.PropA,
PropB = a.PropB
}).ToList()
这里是类,用方法名缩短以混淆一些域的详细信息:
public class AggregateListAnswer
{
[Key, Column(Order = 0)]public virtual int? PY { get; set; }
[Key, Column(Order = 1)]public virtual short? CC { get; set; }
[Key, Column(Order = 2)]public virtual short? BC { get; set; }
[Key, Column(Order = 3)]public virtual short? MC { get; set; }
[Key, Column(Order = 4)]public virtual short? SC { get; set; }
[Key, Column(Order = 5)]public virtual short? BSC { get; set; }
[Key, Column(Order = 6)]public virtual short? FTC { get; set; }
[Key, Column(Order = 7)]public virtual short? MTC { get; set; }
[Key, Column(Order = 8)]public virtual short? DTC { get; set; }
[Key, Column(Order = 9)]public virtual int RQId { get; set; }
[Key, Column(Order = 9)]public virtual Question RQ { get; set; }
[Key, Column(Order = 10)]public virtual int NumericValue { get; set; }
[Key, Column(Order = 11)]public virtual short? SeC { get; set; }
public long Cnt { get; set; }
public double Wgt { get; set; }
}
请注意,Cnt
和Wgt
不打算坚持。它们是瞬态属性。关键是如此之大,因为它对应于现有索引视图中的列。两个属性都使用相同的键顺序9进行注释,因为它们是相同的东西(ID和引用ID的对象)。
最终在您的项目中使用[EF源代码](https://entityframework.codeplex.com/),但可能会有更短的路径。在课堂实例中引发的任何关于该类或初始化程序或代码的内容? – tschmit007 2014-09-03 08:14:10
@ tschmit007:不,它只是一堆属性。有一个用'KeyAttribute'定义的多属性键,对应于索引视图中的多列键。 – 2014-09-03 16:30:09
@ tschmit007:不幸的是,EF团队无法发布调试符号,尽管存在相当复杂的解决方法https://entityframework.codeplex.com/workitem/386。 – 2014-09-03 17:09:20