以下是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查询是错误还是其他任何错误?
答案 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”)]