在VS2010中,我的MSTest测试运行得很好.
在VS2012中运行时出现错误.该测试使用自定义业务主体设置Csla.ApplicationContext.User.当要求EntityFramework提供新的ObjectContext时,我收到一个SerializationException,指出无法找到我的自定义业务主体类型.
在运行VS2012的测试运行器或Resharper7的测试运行器时,使用EntityFramework的所有测试都会失败.我试过NCrunch的测试跑步者,他们都通过了.
我该如何解决这个问题?
我有Table1与以下关系(他们没有强制执行,他们只创建导航属性的关系)
Table1 (*)->(1) Table2 Table1 (*)->(1) Table3 Table1 (*)->(1) Table4 Table1 (*)->(1) Table5
使用急切的加载代码看起来像
IQueryable<Table1> query = context.Table1s;
query = query.Include(Table1 => Table1.Table2);
query = query.Include(Table1 => Table1.Table3);
query = query.Include(Table1 => Table1.Table4);
query = query.Include(Table1 => Table1.Table5);
query = query.Where(row => row.Table1Id == table1Id);
query.Single();
Run Code Online (Sandbox Code Playgroud)
我尝试组织Include()语句的每一种方式,包含的第一个表在其生成的TSQL中都有一个Inner Join,剩下的就是Left Outer Join(我希望所有这些都是Left Outer).我不是实体分裂,它们只是FK的普通表.
如果DefaultIfEmpty()是唯一的解决方案,有人可以解释除了包含的第一个表之外的所有表都提供预期的SQL的原因吗?
我的理解是导航属性的默认行为是LEFT OUTER但我无法获得所有属性来生成默认值.
任何帮助将非常感激.
先感谢您!
-----创建TSQL(为简洁而修改但结构相同)-------
(@p__linq__0 int)SELECT [Limit1].[Table1Id] AS [Table1Id], [Limit1].[OtherData] AS [OtherData] FROM ( SELECT TOP (2) [Extent1].[Table1Id] AS [Table1Id], [Extent1].[OtherData] As [OtherData] …