EntityFramework.Core.dll

时间:2016-01-21 14:56:56

标签: linq-to-entities entity-framework-core asp.net-core

以下是Application Entity

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查询时,我在run-time

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);
}

以下是错误消息:

  

类型&#39; System.InvalidCastException&#39;的例外情况发生在   EntityFramework.Core.dll但未在用户代码中处理

     

其他信息:无法投射“System.Int32&#39;”类型的对象。   输入&#39; System.String&#39;。

LINQ查询是错误还是其他任何错误?

1 个答案:

答案 0 :(得分:2)

从你看来,你在模特身上犯了错误。

当您将外键TechnologyID定义为整数时,您尝试使用无效的数据类型。不知道你正在使用什么类型的数据库,我假设你正在使用某种风格的SQL服务器,在这种情况下,数据类型“整数”不存在。

贝娄应该解决这个问题:

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类型。当你在sql服务器中没有很长的时候尝试在模型中使用long时,指定类型名称更为重要,因此你将TypeName属性用作[Column(TypeName =“bigint”)]