2015-11-05 23 views
2

由於RC中存在大量錯誤,因此在安裝VS2015 Update 1 RC後將其降級爲Update 1 CTP後,以下代碼停止工作,原因不明。LINQ to Entities只支持更新1 RC後降級爲CTP後投射EDM原始類型或枚舉類型

獲取:

無法轉換類型'EFCastTest.ResourceGroup爲鍵入 'EFCastTest.ISortable'。 LINQ到實體僅支持澆鑄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; } 
} 

回答

3

這是一個不完整的修復程序的一種表現中的錯誤,其中介紹了一些迴歸的C#編譯器(https://github.com/dotnet/roslyn/issues/4471)。最初的錯誤(在RTM中引入)從表達式樹中刪除了一些轉換節點,並導致基於LINQ to SQL的現有應用程序中斷。不完整的錯誤修復(包含在Update 1 CTP中)對於添加轉換節點過於積極,導致EF中出現各種中斷。最終修復包含在Update 1 RC中,並恢復C#編譯器在Roslyn之前的行爲。不幸的是我不確定你是否可以使用RC中包含的編譯器,除非你重新安裝RC。

+0

我剛剛重新安裝RC,它仍然無法正常工作。 在我升級到RC之前,它對CTP沒有任何問題。現在它不適用於任何版本。甚至沒有香草VS2015。 – Mikeon

+0

@Mikeon當你看到問題時,你能檢查你使用的編譯器版本嗎?您可以從命令行運行csc.exe,或者查看c:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin中的程序集版本。如果您使用的是ASP.NET 5.0,則可能會得到不同版本的編譯器,具體取決於您獲得的Roslyn包。 – divega

+0

FWIW,我已經看到版本1.1.0.51014似乎生成與以前版本的編譯器相同的表達式樹。 – divega

相關問題