일대일 관계가 있고 캐스케이드를 설정할 수 없으면 캐스케이드를 설정하면 "저장되지 않은 일시적인 인스턴스를 참조하는 개체를 얻습니다."라는 메시지가 나타납니다.Fluent nhibernate one-to-many
내 매핑과 같이 먼저 경우 새로운 푸의 SharedDetails을 저장하지 않고이
public class Foo
{
public Foo()
{
SharedDetails = new SharedDetails();
SharedDetails.Foos.Add(this);
}
public Foo(SharedDetails sharedDetails)
{
SharedDetails = sharedDetails;
SharedDetails.Foos.Add(this);
}
public virtual Guid Id { get; set; }
public virtual SharedDetails SharedDetails { get; set; }
}
public class SharedDetails
{
public SharedDetails()
{
Foos = new List<Foo>();
}
public virtual Guid Id { get; set; }
public virtual IList<Foo> Foos { get; set; }
}
그때, FOOS를 만들
등이
public class SharedDetailsMapping : ClassMap<SharedDetails>
{
public SharedDetailsMapping()
{
Id(x => x.Id).GeneratedBy.Identity();
HasMany(x => x.Foos);
}
}
public class FooMapping : ClassMap<Foo>
{
public FooMapping()
{
Id(x => x.Id).GeneratedBy.Identity();
References(x => x.SharedDetails).Cascade.SaveUpdate();
}
}
클래스 다음과 같습니다
using (var transaction = _session.BeginTransaction())
{
var shared = new SharedDetails();
var fooOne = new Foo(shared);
_session.SaveOrUpdate(fooOne);
var fooTwo = new Foo(shared);
_session.SaveOrUpdate(fooTwo);
transaction.Commit();
}
내가 잘못 한 것을 알아낼 수 없다면 SharedDetail을 저장하면 커밋됩니다. 처음 엔 캐스케이드 설정이 필요합니다. 당신의 SharedDetailsMapping
에서
문제는 'SharedDetails'를 먼저 저장하고 싶지 않기 때문에 '새 Foo()'를 생성하고 저장하면 자동으로 생성되기를 바랍니다. 그게 가능하지 않니? – Christian
매핑을 변경해도 만들기 및 저장에 대한 예제 코드는 변경되지 않습니다. 당신은 당신의 예에서 당신이 한 일을 여전히 할 수 있습니다. 그러나이 매핑 변경은 NHibernate가 내부적으로 저장할 순서를 결정하는 데 도움이된다. – HackedByChinese
'Inverse'를 이미 추가하려고했지만 여전히 동일한 오류가 발생합니다. 'SharedDetails'작업을 저장했지만 캐스케이드 설정의 목적에 위배됩니다. – Christian