我有以下EF查询:
TestEntities db = new TestEntities();
var questions = from q in db.Questions.Include("QuestionType")
from sq in db.SurveyQuestions
where sq.Survey == surveyTypeID
orderby sq.Order
select q;
foreach( var question in questions ) {
// ERROR: Null Reference Exception
Console.WriteLine("Question Type: " + question.QuestionType.Description);
}
Run Code Online (Sandbox Code Playgroud)
当我访问QuestionType属性时,我得到一个空引用异常.我正在使用Include("QuestionType"),但它似乎不起作用.我究竟做错了什么?
编辑:当我启用了延迟加载时,它不会抛出空引用异常.
编辑:当我执行以下操作时,Include()似乎正在工作:
var questions = db.Questions.Include("QuestionType").Select(q => q);
Run Code Online (Sandbox Code Playgroud)
当我在一个单独的实体上进行谓词时,Include似乎失败了.使用Include时是不允许的?我的查询怎么样导致这个东西不起作用?
我有一个相当简单的复合一对多关系,使用POCO/Fluent API定义,其中一列是一个字符串.
我发现我们数据库中这一栏中的数据在案例方面是不一致的,即'abb','ABB' - 这是我们的主要ERP系统,并且由各种来源提供,这些来源主要是我们无法控制的.
这在加入相关表时首先使用EF代码时出现问题,因为当PK/FK的情况不同时,即使SQL Profiler显示正在执行的SQL和返回的结果,EF也会默认忽略该连接.
我正在使用WCF,因此关闭了延迟加载和代理创建,并且急于使用Include加载所需的相关实体.例如.
var member = context.Member.Include(m => m.Audits).First(m => m.Id == id);
Run Code Online (Sandbox Code Playgroud)
除了修改数据库模式之外,还有其他解决方案吗?
fluent-interface code-first ef-code-first entity-framework-4.1
几年前,人们提出了以下问题:实体框架nvarchar外键上的案例敏感性.
简而言之,答案是:EF使用CLR来比较延迟加载的关联的键,并始终以区分大小写的方式执行此操作,即使数据库设置为不区分大小写的排序规则.
不幸的是,我目前参与的项目大量使用VARCHAR主键列.数据库排序规则不区分大小写.
修复数据库设计实际上不是一个选项,除了可能在主键列上设置CS排序规则(但这可能会破坏客户端应用程序).
所以我的问题是双重的:
BTW:SQL Server 2008 R2和实体框架版本6.