2013-07-23 1 views
0

CustomerProfile 클래스가 있는데, 여기에는 하나의 고객이 많은 프로필을 가질 수 있습니다.NHibernate가 일대 다에서 자식 엔티티를 삽입하지 않음

내가 그들과 함께 다음 NHibernate에 재정의 클래스를 사용하고 있습니다 :

public void Override(AutoMapping<Customer> mapping) 
    { 
     mapping.Table("[Customer]"); 
     mapping.Id(x => x.Id, "Id").GeneratedBy.Identity(); 

     mapping.HasMany(x => x.Profiles).Cascade.All().Inverse(); 

     mapping.Map(x => x.FirstName, "FirstName"); 
     mapping.Map(x => x.LastName, "LastName"); 
     mapping.Map(x => x.Email, "Email");    
    } 

public void Override(AutoMapping<Profile> mapping) 
    { 
     mapping.Table("[Profile]"); 
     mapping.Id(x => x.Id, "Id").GeneratedBy.Identity(); 

     mapping.References(x => x.Customer, "Customer_Id").Cascade.None(); 

     mapping.Map(x => x.FacebookProfileLink, "FacebookProfileLink"); 
     mapping.Map(x => x.ContactPhone, "ContactPhone");   
    } 

내가 오류를 다음 얻고을 Profile 개체를 삽입하는 동안 :

컬럼에 'CUSTOMER_ID를'NULL 값을 삽입 할 수 없습니다, 테이블 ' dbo.Profile '; 열이 널을 허용하지 않습니다. INSERT가 실패합니다. \ r \ n 명령문이 종료되었습니다.

내 intence는 Customer 개체에 대한 참조를 필요로 Profile 전에 Customer 개체를 삽입하는 것입니다. 그래서 Inverse 속성을 사용하고 있습니다. 불행히도 그것은 작동하지 않습니다. 이것에 대한 도움이 필요하십니까? 고맙습니다.

답변

0

나를 위해 적합한 해결책을 발견했습니다.

고객 엔터티를 프로필과 관련없이 저장합니다. 이후 프로필 엔티티를 저장하고 있습니다.

Customer Insert의 성공 여부를 확인한 후 다음 단계 (프로필을 저장하거나 유효성 검사 오류를 수행)를 결정할 수 있기 때문에 이전보다 더 나은 솔루션을 제공합니다.

답장을 보내 주셔서 감사합니다.

+0

누군가가 문제에 대한 해결책을 게시 한 것이 좋습니다. 선택한 답변을 표시하십시오. – gcso

0

NHibernate가 좋은 ORM으로하는 한 가지는 관계에있는 모든 것을 저장하는 것이므로 별도로 저장하지 않아도됩니다. 귀하의 문제는 '고객에 대한 참조가 필요한 프로파일 전에 고객 오브젝트 삽입'이라고 말할 때 수행중인 작업과 다를 수 있습니다.

실제로 고객을 생성해야하며 프로필을 연결해야만 고객을 저장해야합니다. NHibernate는 모든 엔티티를 올바른 순서로 저장하여 관계가 유지되는지 확인합니다. 먼저 고객 엔터티를 만들거나 검색 한 다음 프로필을 추가 ​​/ 제거하고 고객을 저장하십시오. 맵핑에서 지정한 계단식 옵션으로 인해 프로파일이 저장됩니다.

희망 하시겠습니까?

+0

답장을 보내 주셔서 감사합니다. (프로필을 추가하여 고객을 절약 할 수 있습니다.) 불행히도 오류는 정확히 동일하게 유지됩니다. ( –

관련 문제