2010-08-06 3 views
3

나는 삭제할 때 어떻게 진행해야하는지 거의 모른다. 내 문제는 범주가 문제와 관련되어 있고이를 프로젝트에서 삭제하려고 시도 할 때 해당 작업을 수행 할 수 없어야한다는 것입니다.NHibernate에서 삭제를 진행하는 방법을 모른다.

어떻게하면됩니까? 도와주세요.

나는이 3 표, 이슈, 프로젝트, 카테고리

다음과 같이 관계는 다음과 같습니다 1. 프로젝트 많은 문제가있을 수 있습니다를, 문제는 문제 만있을 수 있습니다 2. 하나 개의 프로젝트에 관련 프로젝트는 하나 개 또는 여러 범주

이있을 수 있습니다 3. 하나 개의 범주 다음과 같이

Issue.hbm.xml은 다음과 같습니다

<id name="id" type="Int32" unsaved-value="0" access="field"> 
    <column name="ID" length="4" sql-type="int" not-null="true" unique="true" index="PK_Issue"/> 
    <generator class="native" /> 
</id> 
<many-to-one name="Project" class="API.Project, API"> 
    <column name="ProjectID" length="4" sql-type="int" not-null="false"/> 
</many-to-one> 
<many-to-one name="Category" class="API.Category, API"> 
    <column name="CategoryID" length="4" sql-type="int" not-null="false"/> 
</many-to-one> 

project.hbm.xml

<id name="id" type="Int32" unsaved-value="0" access="field"> 
    <column name="ID" length="4" sql-type="int" not-null="true" unique="true" index="PK_Project"/> 
    <generator class="native" /> 
</id> 
<property name="Name" type="String"> 
    <column name="Name" length="200" sql-type="varchar" not-null="true" unique="true" index="IX_Project_Name"/> 
</property> 

category.hbm.xml

<id name="id" type="Int32" unsaved-value="0" access="field"> 
     <column name="ID" sql-type="int" not-null="true" unique="true" index="PK_Category"/> 
     <generator class="native" /> 
    </id> 
    <property name="Name" type="String"> 
     <column name="Name" length="50" sql-type="varchar" not-null="true" unique="true" index="IX_Category"/> 
    </property> 
    <many-to-one name="Project" class="API.Project, API" > 
     <column name="ProjectID" length="4" sql-type="int" not-null="false"/> 
    </many-to-one> 

답변

0

나는 데이터베이스에 가정하고 당신은 참조 ID 년대 외국 키가? (그렇지 않으면해야한다). 이 경우 매핑의 외래 키 특성이 필요하며 현재 누락 된 것처럼 보입니다.

issue.hbm.xml 위해이 같은 것을 볼 수 있습니다

<id name="id" type="Int32" unsaved-value="0" access="field"> 
    <column name="ID" length="4" sql-type="int" not-null="true" unique="true" index="PK_Issue"/> 
    <generator class="native" /> 
</id> 
<many-to-one name="Project" class="API.Project, API" foreign-key="FK_Issue_Project"> 
    <column name="ProjectID" length="4" sql-type="int" not-null="false"/> 
</many-to-one> 
<many-to-one name="Category" class="API.Category, API" foreign-key="FK_Issue_Category"> 
    <column name="CategoryID" length="4" sql-type="int" not-null="false" /> 
</many-to-one> 

내가 여기에 넣어하신 FK 이름은 바로 가정, 가서 그들이 올바른지 확인 그들이 당신의 DB에 체크 아웃합니다. NHibernate에 당신의 FK 관계에 대해 알고 나면

는 나머지 :)의주의를 기울여야한다

편집 :

죄송합니다 - 외래 키 속성은 대일 요소에 안 미안. 수정 된 코드를 참조하십시오.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. { "API.NHibernate.Issue.hbm.xml (9,75) : XML 유효성 검사 오류 : 'foreign-key'속성이 선언되지 않았습니다."} 내 DB에서 볼 수 있습니다. 외래 키 관계 : FK_Issue_Category, FK_Issue_Project 및 귀하의 예에 따라 변경했습니다. – learning

+0

편집 된 코드를 가지고 있으며 어떻게 보이는지 알려주세요. :) – Scozzard

1

IMO, 뭔가 할 수 없으면 수업에서 허용해서는 안됩니다.

클래스의 코드를 제공하지 않았습니다. 그러나 비즈니스 오브젝트에서 유효한 조작 만 가능하도록하십시오. NH에서는 ORM을 사용하고 있습니다. 응용 프로그램의 핵심은 데이터베이스가 아니라 클래스 모델입니다. 객체 지향의 힘을 실제로 사용하지 않으면 NH의 모든 힘을 얻지 못합니다.

아마도 캡슐화가 해결책입니다.

이것은 데이터베이스 자체가 항상 최소한의 일관성 검사도 제공해야한다고 말했습니다. 범주의 ProjectID를 null이 아닌 것으로 만들어야합니다. (때로 NH는 순환 참조가있을 때와 같이 null이 아닌 제약 사항에 문제가 생기면 제거해야합니다.)

Off 주제 : 일반적으로 SQL 유형을 지정할 필요가 없습니다. NH는 의미있는 기본값으로 설정합니다. 그리고 : 데이터베이스 스키마를 직접 작성하지 않아도됩니다 (기존 데이터베이스에 있지 않은 경우). 매핑 파일에 따라 스키마를 쓰는 (매우 권장되는) ExportSchema 클래스를 사용할 수 있습니다.그런 다음 동일한 정보를 두 번 쓸 필요가 없습니다.

관련 문제