가 현재 나는 다음과 같은 협회와 데이터베이스가 같은 개체를 만들려고 : 많은 개입에NHibernate에 두 번
- 하나의 클라이언트
- 한 CaseManagement 많은 CaseManagements에
- 하나 흡입 많은 섭취로를
- Client, Intake, CaseManagement는 테이블 당 단일 클래스입니다.
- 개입은 테이블 당 클래스 계층 구조입니다. 나는 이런 식으로 뭔가를 할 경우
현재 :
var client = new Client();
clientRepo.Add(client);
var intake = new Intake();
client.Add(intake);
var caseMan = new CaseManagement();
intake.Add(caseMan);
clientRepo.Update(client);
모든 것이 잘 작동하고, NHibernate에 (모든 적절히 연결) 데이터베이스에 다음 클라이언트, 다음 섭취와 CaseManagement을 만듭니다. 다음 작업을 수행하는 경우
그러나 :
var client = new Client();
clientRepo.Add(client);
var intake = new Intake();
client.Add(intake);
var caseMan = new CaseManagement();
intake.Add(caseMan);
var intervention = new SubIntervention();
caseMan.Add(intervention);
clientRepo.Update(client);
그것은 망쳐 다음과 같은 SQL 실행 : 별표 라인이 동일
INSERT INTO TblClient ... (*)
INSERT INTO TblIntake ...
INSERT INTO TblCaseManagement ...
INSERT INTO TblClient ... (*)
합니다. 상속을 사용하는 이유가 무엇인지 모릅니다.
내 Intake 클래스에 대한 매핑은 다음과 같습니다 (Client 및 CaseManagement와 거의 같습니다).
가하려고하고있다 내가 그 말이냐<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="WebTracker4"
namespace="WebTracker4.Domain.Interventions">
<!-- Class Mapping -->
<class name="Intervention" table="TblIntervention" abstract="true">
<!-- Id -->
<id name="Id" column="InterventionId">
<generator class="sequence">
<param name="sequence">InterventionSequence</param>
</generator>
</id>
<!-- Discriminator -->
<!-- This is used so that we can have Intervention subclasses. -->
<discriminator column="InterventionType" type="String" />
<!-- TCN -->
<version name="Tcn" column="InterventionTcn" type="Int64" />
<!-- Case Management -->
<many-to-one name="CaseManagement" column="CaseManageId" class="WebTracker4.Domain.CaseManagement, WebTracker4" />
<!-- Properties -->
....
<!-- Assessment Subclass -->
<subclass name="SubIntervention" discriminator-value="Sub">
...
</subclass>
</class>
클라이언트 개체를 다시는-추가
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="WebTracker4"
namespace="WebTracker4.Domain">
<!-- Class Mapping -->
<class name="Intake" table="TblIntake">
<!-- Id -->
<id name="Id" column="IntakeId">
<generator class="sequence">
<param name="sequence">IntakeSequence</param>
</generator>
</id>
<!-- TCN -->
<version name="Tcn" column="IntakeTcn" type="Int64" />
<!-- Client -->
<many-to-one name="Client" column="ClientId" class="Client" />
<!-- Case Management -->
<bag name="CaseManagements" inverse="true" cascade="all" table="TblCaseManage" order-by="CaseManageId desc">
<key column="IntakeId" />
<one-to-many class="CaseManagement" />
</bag>
<!-- Properties -->
...
</class>
</hibernate-mapping>
는 여기에 개입 클래스 계층 구조 내 매핑입니까? 주목할만한 점은 서브 클래스의 컬럼 이름을 망가 뜨리면 NHibernate는 아무 말도하지 않는다는 것입니다.
이
내가 문제를 파악 :)