一对多关系错误

时间:2012-02-13 21:11:51

标签: entity-framework ef-code-first

我有以下型号,但我一直收到错误:

  

未处理的异常:System.InvalidOperationException:一种关系   发生了乘法约束违规:EntityReference可以   只有一个关联对象,但查询返回更多   比一个相关的对象。这是一个无法恢复的错误。

 public class Tournament
    {
        public long TournamentId { get; set; }        
        public string Title { get; set; }        
        public virtual User CreatedBy { get; set; }                    
    }

 public class User
    {
        public int UserId { get; set; }

    }

        modelBuilder.Entity<Tournament>()
            .HasRequired(t => t.CreatedBy)
            .WithOptional()               
            .Map(c => c.MapKey("CreatedById")); // correct column name

3 个答案:

答案 0 :(得分:5)

您的模型流畅配置条目不正确。将其更改如下

    modelBuilder.Entity<Tournament>()
        .HasRequired(t => t.CreatedBy)
        .WithMany()               
        .Map(c => c.MapKey("CreatedById")); // correct column name

答案 1 :(得分:0)

如果您修改一下模型,那么管理外键会更好:

public class Tournament
    {
        public long TournamentId { get; set; }        
        public string Title { get; set; } 
        public virtual int CreatedById {get;set;}       
        public virtual User CreatedBy { get; set; }                    
    }

你的映射看起来更像是这样:

modelBuilder.Entity<Tournament>()
        .HasRequired(t => t.CreatedBy)
        .WithMany()               
        .HasForeignKey(t => t.CreatedById); // correct column name

这样,当您创建新的锦标赛实体时,您只需要传递CreatedById而不是整个用户对象。

答案 2 :(得分:0)

如果您启用了延迟加载并且未将所有导航属性指定为可覆盖(C#Virtual),也会发生这种情况。