0

親クラスがあります

public class Parent
{
    public Parent(DateTime? date) { Date = date; }

    public DateTime? Date { get; set; }

    public List<Child> Children { get; set; }

    public void Save()
    {
        foreach(var child in Children)
        {
            child.Save(Date ?? DateTime.Now);
        }
    }
}

明らかに、私には子クラスもあり、私の問題の本当の原因は次のとおりです。

public class Child
{
    public Child () {}

    public Decision FirstDecision { get; set;}

    public Decision SecondDecision { get; set; }

    public OtherProperty SomeOtherProperty { get; set; }

    public void Save(DateTime date)
    {
        SaveFirstDecision(date);
        SaveSecondDecision(date);
    }

    public void SaveFirstDecision(date)
    {
        var type = FactoryTools.Factory.CreateQueryable<DecisionType>()
                       .FirstOrDefault(x => x.Name = "First");


        if(FirstDecision == null) FirstDecision = new Decision { Type = type };

        FirstDecision.SomeOtherPropery = SomeOtherProperty;
        FirstDecision.SomeDate = date;

        FactoryTools.Factory.SaveOrUpdate(FirstDecision);
    }

    public void SaveSecondDecision(date)
    {
        var type = FactoryTools.Factory.CreateQueryable<DecisionType>()
                       .FirstOrDefault(x => x.Name = "Second");


        if(SecondDecision == null) SecondDecision = new Decision { Type = type };

        SecondDecision.SomeOtherPropery = SomeOtherProperty;
        SecondDecision.SomeDate = date;

        // This is where the Exception occurs
        FactoryTools.Factory.SaveOrUpdate(SecondDecision);
    }
}

そのため、2 回目の SaveOrUpdate で、NHibernate は次の例外をスローします。 Cannot insert duplicate key row in object 'dbo.d_decision' with unique index 'd_decision_i1'.

NHibernate がこれら 2 つの決定を重複と見なす理由がわかりません... Equalsandをオーバーライドするなど、多くのことを試しましHashCodeたが、この問題を回避できないようです。ご協力いただきありがとうございます。

ところで、ここに示されているクラスは、関連するコード部分であると私が信じているものの抽象化にすぎません。これらのクラスには他のプロパティがありますが、それらが関連しているとは思いません...

4

1 に答える 1

1

Darren Kopp が指摘したように、これはデータベースの問題でした。私たちのデータベース管理者の 1 人が、列の特定の組み合わせで、少なくとも 1 つが異なる必要があるテーブルにインデックスを作成しました...

于 2013-04-11T19:09:26.660 に答える