EF代码优先:InvalidOperationException违反了多重性约束

时间:2012-04-12 08:39:12

标签: asp.net entity-framework ef-code-first code-first

当我尝试从我的存储库加载所有CssFile时,出现多重性错误。在调试当前现有对象时,一切似乎都很好。我试图包含()页面,但发生了同样的错误。

    public CssFile FindByPage(Page page)
    {
        return cssFiles.Where(f => f.PageId == page.Id).Single();
    }
  

违反了多重性约束。关系的作用   Page_CssFile_Target Paycento_Models.DAL.Page_CssFile,多样性   1或0 .. 1。

 public class Page
    {
        [Key()]
        public int Id { get; set; }
        [ForeignKey("CssFile")]
        public int CssFileId { get; set; }
        public virtual CssFile CssFile { get; set; }
     }

  public class CssFile
    {
        public string FileName { get; set; }
         [Key()]
        [ForeignKey("Page")]
        public int PageId { get; set; }
        public virtual Page Page { get; set; }
      }

2 个答案:

答案 0 :(得分:0)

它与Lazy加载有关,我试图重新加载已经加载的对象。不知道它崩溃的具体原因,但设法修复它。

答案 1 :(得分:0)

我认为代码应该是

public class Page
{
    [Key()]
    public int Id { get; set; }
    //[ForeignKey("CssFile")]
    //public int CssFileId { get; set; }
    public virtual CssFile CssFile { get; set; }
 }

public class CssFile
{
    [Key()]
    public int Id { get; set; }
    public string FileName { get; set; }

    [Required]
    [ForeignKey("Id")]
    public virtual Page Page { get; set; }
  }

CssFile中不需要'PageId',因为关系是一对一的,主键将被共享。