2016-01-21 56 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

谢谢!为解决方案和旁注。 –

相关问题