給予代碼: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