这个错误让我发疯。它曾经工作过。现在它没有。不确定是什么变化导致它,我不能回滚而不会丢失很多东西。
Unable to cast object of type 'System.Collections.Generic.List`1[Literrater.Models.ranges]'
to type 'Literrater.Models.ranges'.
这是模特。
public class Comment
{
[Key]
public int CommentID { get; set; }
public int ProjectDocID { get; set; }
public int UserID { get; set; }
public string text { get; set; }
public string quote { get; set; }
public DateTime DateCreated { get; set; }
public virtual ICollection<CommentVote> CommentVote { get; set; }
public virtual ICollection<CommentReply> CommentReply { get; set; }
public virtual ICollection<CommentReport> CommentReport { get; set; }
public ProjectDoc ProjectDoc { get; set; }
public virtual User User { get; set; }
public ICollection<ranges> ranges { get; set; }
}
public class ranges
{
public int ID { get; set; }
public string start { get; set; }
public string end { get; set; }
public string startOffset { get; set; }
public string endOffset { get; set; }
}
引发错误的操作
[HttpPost, ActionName("Create")]
public ActionResult Create(Comment comment)
{
comment.DateCreated = DateTime.Now;
comment.UserID = WebSecurity.CurrentUserId;
db.Comments.Add(comment); //Error here
db.SaveChanges();
return Json(comment);
Json被张贴。
{"text":"",
"ranges":
[{
"start":"/p[1]",
"startOffset":160,
"end":"/p[1]",
"endOffset":234
}],
"quote":"es. Hadn't they ever heard of potpourri? Each incessant beep, made by the",
"UserID":"6",
"ProjectDocID":"1"
}
更新:旧工作数据库的屏幕截图
答案 0 :(得分:1)
一次更换一个文件几个小时后,我的DAL上下文文件似乎有这个流畅的API语句。
modelBuilder.Entity<ranges>().HasRequired(p => p.Comment);
我不知道为什么我添加它,但是评论它会使错误消失。如果有人可以解释它会很好。
原来我做到了,所以我可以删除评论,现在不行。
答案 1 :(得分:1)
就我而言,事实证明我的xml源中有一对多的关系:
<one-to-many name="physicalLocations"
propertyDefinintion="Defines the physical location of the department"
typeName="POCO.BO.Location"
nullable="false"
dbColumn="DepartmentId" />
但在生成的C#文件中仍然有一个外键关系值:
/// <summary>
/// Defines the physical location of the department
/// </summary>
public const string F_PHYSICALLOCATIONS = "PhysicalLocations";
[ForeignKey("PhysicalLocations")]
public string DepartmentId { get; set; }
private Location _physicalLocations;
public virtual Location PhysicalLocations { get { return _physicalLocations; } set { _physicalLocations = value; } }
所以它实际上是一对一而不是一对多。我这样修好了:
<one-to-one name="physicalLocations"
propertyDefinintion="Defines the physical location of the department"
typeName="POCO.BO.Location"
nullable="false"
dbColumn="DepartmentId" />
答案 2 :(得分:1)
我有完全相同的错误,并且最终有相同的原因-EF对这种关系的性质缺乏一致的理解。
就我而言,我们使用的是基于注释的模型,并且数据库结构是独立管理的。我会无意间将模型设置错误...
在父母中
public ICollection<TriangleCell> Cells { get; set; }
在儿童中
[Key]
public int ParentId { get; set; }
[ForeignKey(nameof(ParentId ))]
public ParentTable Parent{ get; set; }
public int Col1 { get; set; }
public int Col2 { get; set; }
public int ValueCol { get; set; }
我相信,因为只有ParentId被标记为Key
,所以EF推断关系必须是一对一的,而且一切都出错了。
在模型类中标记其余的自然键可修复该错误。
在父母中
public ICollection<TriangleCell> Cells { get; set; }
在儿童中
[Key, Column(Order = 0)]
public int ParentId { get; set; }
[ForeignKey(nameof(ParentId ))]
public ParentTable Parent{ get; set; }
[Key, Column(Order = 1)]
public int Col1 { get; set; }
[Key, Column(Order = 2)]
public int Col2 { get; set; }
public int ValueCol { get; set; }