3

这个错误让我发疯。它曾经工作过。现在没有了。不知道是什么变化导致了它,我不能在不丢失很多东西的情况下回滚。

 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"
 }

更新:旧工作数据库的屏幕截图 在此处输入图像描述 在此处输入图像描述

4

3 回答 3

1

在一次替换一个文件几个小时后,我的 DAL 上下文文件似乎有这个流畅的 API 语句。

 modelBuilder.Entity<ranges>().HasRequired(p => p.Comment);

我不知道为什么要添加它,但是将其注释掉会使错误消失。如果有人能解释一下,那就太好了。

原来我这样做了,所以我可以删除评论,这现在不起作用。

于 2013-01-29T21:24:57.433 回答
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" />
于 2015-12-03T19:04:13.933 回答
1

我有完全相同的错误,最终也是同样的原因——EF 对这种关系的性质的理解不一致。

在我的例子中,我们使用基于注释的模型,数据库结构独立管理。我无意中将模型设置错误...

数据库结构:

  • 我有一个父表和一个子表。一个父母对许多孩子。
  • 子表有 ParentId 列 FKing 到父级。
  • 子表没有人工PK。
  • 子表具有 ParentId + Col1 + Col2 的自然 PK。

错误的 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 推断关系必须是一对一的,一切都出错了。

在模型类中标记自然键的其余部分修复了错误。

良好的 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; }
于 2019-05-09T07:19:20.913 回答