親クラスがあります
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 つの決定を重複と見なす理由がわかりません... Equals
andをオーバーライドするなど、多くのことを試しましHashCode
たが、この問題を回避できないようです。ご協力いただきありがとうございます。
ところで、ここに示されているクラスは、関連するコード部分であると私が信じているものの抽象化にすぎません。これらのクラスには他のプロパティがありますが、それらが関連しているとは思いません...