0

上記のエラーが発生したときに、いくつかのオブジェクトをデータベースに保存しようとしています。私がググったり検索したりしても、まだ何か役に立つものは得られていないので、ここで質問します。

それがうまくいかないコード:

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 つの契約があります。モデル インスタンスの追加を開始すると、エラーがスローされます。奇妙なことに、プロキシ インスタンスにも同じサブスクリプションが指定されており、エラーがスローされません。私が考えることができる唯一のことは、追加しようとしているモデルも同じ名前と管理を持っているということです。

このしつこい問題の解決策を誰かが知っていることを願っています。私が持っているちょっとした考えは、Entity Framework がサブスクリプションとコントラクトの間の 1 対多の関係を認識しないということです。なぜこの関係が認識されないのか、私にはわかりません。

事前にt​​hx!

4

1 に答える 1