LINQ to Entities仅支持在Update 1 RC降级为CTP后转换EDM原语或枚举类型

时间:2015-11-05 16:33:48

标签: c# entity-framework visual-studio-2015

由于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; }
}

1 个答案:

答案 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。