【问题标题】:Multiplicity error in one to Many Relationship一对多关系中的多重性错误
【发布时间】:2016-12-08 15:39:12
【问题描述】:

我有多个嵌套在一起的实体,当我尝试添加调查类时出现错误

违反了多重性约束。关系“SurveyMonkeyAPIv3.Response_Pages”的角色“Response_Pages_Source”具有多重性 1 或 0..1。

因为它们都继承了Entity

public abstract class Entity  :IEquatable<Entity>
{

    [DataMember]
    public virtual long Id { get; set; }

    public override int GetHashCode()
    {
        return Convert.ToInt16(Id);
    }

    public bool Equals(Entity other)
    {
        return false;
    }
}

调查实体

public class Survey : Entity, IEquatable<Survey>
{
//More fields//
    [DataMember]
    public string AnalyzeUrl { get; set; }


    [DataMember]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public override long Id { get; set; }

    [DataMember]
    public string Language { get; set; }

    [DataMember]
    public int? PageCount { get; set; }
    [DataMember]
    public virtual List<Page> Pages { get; set; }
    [DataMember]
    public string Preview { get; set; }
    //More Fields
    public bool Equals(Survey other)
    {
        return this.Id == other.Id;
    }
}

和页面

public class Page : Entity, IEquatable<Page>
{
    [DataMember]
    public string Description { get; set; }

    [DataMember]

    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public new long? Id { get; set; }

    [DataMember]
    public int? Position { get; set; }

    [DataMember]
    public int? QuestionCount { get; set; }
   //More Objects

    // public long SurveyId { get; set; }
    // public List< Survey> Survey   { get; set; }
    //tried including these , can't set in my automappers

但我找不到解决此问题的方法。

添加:

被指向 Response Entity ,随后

public class Response : Entity, IEquatable<Response>
{
    [DataMember]
    public string AnalyzeUrl { get; set; }

    [DataMember]
    public CollectionMode? CollectionMode { get; set; }

    [DataMember]
    public long? CollectorId { get; set; }

    [DataMember]
    public string CustomValue { get; set; }

    //[DataMember]
    //public Dictionary<string, string> CustomVariables { get; set; }

    [DataMember]
    public DateTime? DateCreated { get; set; }

    [DataMember]
    public DateTime? DateModified { get; set; }

    [DataMember]
    public string EditUrl { get; set; }

    [DataMember]

    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public new long? Id { get; set; }

    [DataMember]
    public string IpAddress { get; set; }

    //[DataMember]
    //public Dictionary<string, object> LogicPath { get; set; }

    //[DataMember]
    //public Dictionary<string, object> Metadata { get; set; }
    [DataMember]
    public virtual List<object> PagePath { get; set; }

    [DataMember]
    public virtual List<ResponsePage> Pages { get; set; }
    [DataMember]
    public virtual List<ResponseQuestion> Questions { get; }

    [DataMember]
    public long? RecipientId { get; set; }

    [DataMember]
    public ResponseStatus? ResponseStatus { get; set; }

    [DataMember]
    public long? SurveyId { get; set; }

    [DataMember]
    public int? TotalTime { get; set; }

    public bool Equals(Response other)
    {
        return Id == other.Id;
    }
}

【问题讨论】:

  • 一个调查可以有多个页面,但为什么一个页面可以有多个调查?
  • 你有一个响应实体吗?看起来关系的名称告诉您问题出在 Response 和 Page 实体之间。
  • 我确实有响应实体,抱歉 - 将编辑
  • Page to Survey(很多?)这不可能是另一个错误 - 为解决此问题而创建的。
  • 你能在你的页面实体中添加外键来响应。我想这会告诉我们问题的根源。

标签: c# entity-framework


【解决方案1】:

用 标记调查属性(来自页面),实际上您需要添加一个新属性:

[ForeignKey("SurveyId")]
[DataMember]
public Survey Survey {get;set;}

以及来自调查的页面列表:

 [InverseProperty(nameof(Page.Survey))]

【讨论】:

  • 我想我理解外键但是你能解释一下逆属性吗?
  • 我需要 [ForeignKey("SurveyID")] public long SurveyID
  • 你需要 public long SurveyID (没有外键属性),但你还需要我上面描述的导航属性(对象本身): public Survey Survey {get;set;} (带外关键就可以了)
  • 感谢工作。抱歉,我没有早点标记它,我遇到了其他问题,不确定我做对了
猜你喜欢
  • 2012-07-07
  • 2012-07-02
  • 1970-01-01
  • 2018-11-19
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2018-09-09
相关资源
最近更新 更多