由于RC中存在大量错误,以下代码在我安装VS2015 Update 1 RC
并稍后降级为Update 1 CTP
之后无缘无故地停止工作。
获得:
无法将类型'EFCastTest.ResourceGroup'强制转换为'EFCastTest.ISortable'。 LINQ to Entities仅支持转换EDM原语或枚举类型
class Program
{
static void Main(string[] args)
{
var sorted = GetSorted<ResourceGroup>();
}
static T[] GetSorted<T>() where T : class, ISortable
{
var ctx = new Model1();
var sorted = ctx.Set<T>().OrderBy(x => x.SortOrder).ToArray(); // <- in this line
return sorted;
}
}
public interface ISortable
{
int? SortOrder { get; }
}
public partial class ResourceGroup : ISortable
{
public int? SortOrder { get; set; }
}
答案 0 :(得分:3)
这是对C#编译器(https://github.com/dotnet/roslyn/issues/4471)中的错误的不完整修复的表现,它引入了许多回归。原始错误(在RTM中引入)从表达式树中删除了一些强制转换节点,并导致基于LINQ to SQL的现有应用程序中断。不完整的错误修复(包含在Update 1 CTP中)对于添加强制转换节点过于激进并导致EF中的各种中断。最终修复包含在Update 1 RC中,并恢复C#编译器在Roslyn之前的行为。不幸的是,我不确定你是否可以使用RC中包含的编译器,除非你重新安装RC。