2016-01-21 60 views
1

下面是該Application EntitySystem.InvalidCastException發生在EntityFramework.Core.dll

public class Application 
{ 
    [Key] 
    [Column(TypeName = "integer")] 
    public int ApplicationID { get; set; } 

    [Required] 
    [Column(TypeName = "nvarchar(50)")] 
    public string ApplicationName { get; set; } 

    [Column(TypeName = "nvarchar(150)")] 
    public string Description { get; set; } 

    [Required] 
    [ForeignKey("mTechnology")] 
    [Column(TypeName = "integer")] 
    public int TechnologyID { get; set; } 

    [Required] 
    [Column(TypeName = "int")] 
    public string CreatedBy { get; set; } 

    [Required] 
    [Column(TypeName = "datetime")] 
    public DateTime CreatedDate { get; set; } 

    public virtual mTechnology Technology { get; set; } 
} 

上執行以下LINQ查詢,我在foreach loop

List<int> technologyList = new List<int>(); 
var query = from a in _mApplicationDbContext.Applications 
     group a.Technology by a.TechnologyID into g 
     select new 
     { 
      TechnologyID = g.Key 
     }; 

foreach (var item in query) 
{ 
    technologyList.Add(item.TechnologyID); 
} 
run-time得到一個錯誤

以下是錯誤信息:

類型'System.In的異常validCastException」發生於 EntityFramework.Core.dll但在用戶代碼中沒有處理

其他信息:無法轉換類型的對象‘System.Int32’ 爲類型‘System.String’。

是LINQ查詢錯誤還是其他錯誤?

回答

1

通過你在模型中犯了錯誤的外觀。

當您將外鍵技術ID定義爲整數時,您正試圖使用​​無效的數據類型。不知道你正在使用什麼類型的數據庫,我假設你正在使用某種風格的sql server,在這種情況下,數據類型「integer」不存在。

婁應該解決的問題:

public class Application 
{ 
    [Key] 
    [Column] 
    public int ApplicationID { get; set; } 

    [Required] 
    [Column(TypeName = "nvarchar(50)")] 
    public string ApplicationName { get; set; } 

    [Column(TypeName = "nvarchar(150)")] 
    public string Description { get; set; } 

    [Required] 
    [ForeignKey("mTechnology")] 
    [Column] 
    public int TechnologyID { get; set; } 

    [Required] 
    [Column(TypeName = "int")] 
    public string CreatedBy { get; set; } 

    [Required] 
    [Column] 
    public DateTime CreatedDate { get; set; } 

    public virtual mTechnology Technology { get; set; } 
} 

作爲一個側面說明,你並不總是需要指定類型名稱爲所有的你的屬性。如果你有一個int屬性並將它映射到一個int列,你可以使用[Column]屬性,EF將使用正確的int類型。當你在你的模型中嘗試使用long時,指定類型名稱更重要,因爲在sql server中沒有很長的時間,所以你可以使用TypeName屬性作爲[Column(TypeName =「bigint」)]

+0

謝謝!爲解決方案和旁註。 –

相關問題