【发布时间】:2014-09-03 05:39:40
【问题描述】:
给定代码:
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 进行故障排除?
更新
我可以在具有相同属性但没有[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 source code,但路径可能更短。关于类或初始化程序或类实例化时触发的代码的任何信息?
-
@tschmit007:不,这只是一堆属性。有一个用
KeyAttribute定义的多属性键,对应索引视图中的多列键。 -
@tschmit007:不幸的是,EF 团队无法发布调试符号,尽管有一个相当复杂的解决方法entityframework.codeplex.com/workitem/386。
-
如果您重建 dll,则不需要调试符号。卸载包,从代码库添加新项目设置依赖项并运行....
-
@EricJ。你能显示
AggregateListAnswer类代码吗?
标签: entity-framework entity-framework-6