【问题标题】:Multiplicity constraint violated. The role 'Contract_Subscription_Target' of the relationship 'Contract_Subscription' has multiplicity 1 or 0..1违反了多重性约束。关系“Contract_Subscription”的角色“Contract_Subscription_Target”具有多重性 1 或 0..1
【发布时间】:2014-09-12 04:14:33
【问题描述】:

当我收到上述错误时,我正在尝试将一些对象保存到数据库中。 我用谷歌搜索和搜索的所有内容都没有找到有用的东西,因此这里的问题。

出错的代码:

foreach (Contract con in sub.Contracts.Where(c => !c.Approved))
        {
            con.Approved = true;
            DatabaseHelper.db.Contracts.Add(con);
        }

类契约:

public class Contract
{
    public int ID { get; set; }

    public int SubscriptionID { get; set; }

    public int? AdministrationID { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string Description { get; set; }

    [Required]
    [DataType(DataType.Date)]
    public DateTime BeginDate { get; set; }

    public DateTime EndDate { get; set; }

    [Required]
    public Boolean Periodically { get; set; }

    [Required]
    public Boolean Approved { get; set; }

    [Required]
    public double Amount { get; set; }

    [InverseProperty("Contracts")]
    [ForeignKey("SubscriptionID")]
    public virtual Subscription Subscription { get; set; }

    [ForeignKey("AdministrationID")]
    public virtual Administration Administration { get; set; }

    public Contract()
    {
        Approved = false;
        BeginDate = (DateTime)SqlDateTime.MinValue;
        EndDate = (DateTime)SqlDateTime.MinValue;
    }
}

还有课程订阅:

public enum Status
{
    REGISTERED, AUTHORIZED, ADMSELECT, SETTINGSCOMPLETE, TRIAL, FULL
}

public enum Process
{
    REGISTERING, CHANGESETTINGS, REGISTERED, UNAUTHORIZED, CANCELLED
}

public class Subscription
{
    public int ID { get; set; }

    [ForeignKey("Customer")]
    public int CustomerID { get; set; }

    [ForeignKey("App")]
    public int AppID { get; set; }

    [DataType(DataType.Text)]
    public string ExactFullName { get; set; }

    [DataType(DataType.Text)]
    public string ExactUserID { get; set; }

    [DataType(DataType.Text)]
    public string ExactUserName { get; set; }

    [DataType(DataType.EmailAddress)]
    public string ExactUserEmail { get; set; }

    [DataType(DataType.Text)]
    public string ExactLanguageCode { get; set; }

    [DataType(DataType.Text)]
    public string ExactCurrentDivision { get; set; }

    [DataType(DataType.Text)]
    public string BankAccount { get; set; }

    public Boolean PaymentInfoNeeded { get; set; }

    [Required]
    [DataType(DataType.Date)]
    public DateTime SubscribedAt { get; set; }

    [Required]
    [DataType(DataType.Date)]
    public DateTime PaidForTill { get; set; }

    [DataType(DataType.Date)]
    public DateTime DeprovisioningDate { get; set; }

    [DataType(DataType.Date)]
    public DateTime EndContractDate { get; set; }

    [DataType(DataType.Text)]
    public string AuthorizationCode { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime AuthorizationDate { get; set; }

    [DataType(DataType.Text)]
    public string RefreshToken { get; set; }

    [DataType(DataType.Text)]
    public string AuthorizationToken { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime tokenExpiresAt { get; set; }

    public Status Status { get; set; }

    public Process Process { get; set; }

    public Boolean AutoSubscribe { get; set; }

    public Boolean Incasso { get; set; }

    public Boolean AgreeTerms { get; set; }

    public Boolean Copy { get; set; }

    public virtual Customer Customer { get; set; }

    public virtual App App { get; set; }

    public virtual ICollection<Administration> Administrations { get; set; }

    public virtual ICollection<SubscriptionSetting> Settings { get; set; }

    [InverseProperty("Subscription")]
    public virtual ICollection<Contract> Contracts { get; set; }

    // some more constructors

当我尝试添加具有相同订阅的额外合同时发生错误。在这种情况下,我有 2 个合同已经添加并且是代理实例和 2 个合同仍然是模型实例。当我开始添加模型实例时,会引发错误。奇怪的是,我的代理实例也有相同的 Subscription 指向它并且不会引发错误。我唯一能想到的是,试图添加的模型也具有相同的名称和管理。

我希望有人知道这个烦人的问题的解决方案。 我的一个小想法是实体框架不承认我订阅和合同之间的一对多关系。为什么它不承认这种关系是我不明白的。

提前谢谢!

【问题讨论】:

    标签: asp.net frameworks entity one-to-many multiplicity


    【解决方案1】:

    好的,我今天骑车上班时掌握了解决方案。

    在我的应用程序中,我有两种方式绑定。我通过将重复的非数据库附加订阅的合同复制到附加数据库的订阅来更新订阅一侧的绑定。

    我没有注意到的是,合同项目上的订阅仍然是非附加订阅。因此,当我尝试将合同添加到数据库中时,EF 正在级联,并且还尝试将未附加的订阅添加到数据库中。这当然是没有意义的,因为一个 Contract 然后具有未同步的绑定。 EF 抛出多重性错误,因为它还与合同相加的订阅违反多重性约束,因为两个订阅现在引用同一个合同。

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多