2009-12-23 2 views
3

null 값을 허용하고 모든 필드에 기본값을 갖는 데이터베이스가 있습니다. 유창한 nHibernate를 사용하여, 일부 속성을 가지고 있지만 모든 속성을 채우지 않은 구성 요소가있는 경우 Insert에서 오류가 발생합니다. DynamicInsert 플래그를 구성 요소 수준으로 가져 오는 방법을 궁금합니다. 어쩌면 늦은 것일 수도 있지만, 여기를 내려 놓고 어디로 가는지 보겠습니다.nhibernate 동적 삽입이 일부 null로 실패 함 구성 요소 속성

매핑 :

public ClientMap() 
    { 
     Table("Clients"); 
     DynamicInsert(); 
     DynamicUpdate(); 
     CompositeId() 
      .KeyProperty(x => x.Accountnumber, "acct_no") 
      .KeyProperty(x => x.Transferaccount, "tr_acct_no"); 

     Component(c => c.Address, 
      m =>{ 
       m.Map(x => x.Streetaddress, "coaddress").Not.Nullable().Default(""); 
       m.Map(x => x.City, "cocity").Not.Nullable().Default(""); 
       m.Map(x => x.Postalcode, "costate").Not.Nullable().Default(""); 
       m.Map(x => x.State, "cozip").Not.Nullable().Default(""); }); 
    } 

시험 :

Client nw = new Client{ Address = new Address{Streetaddress = "my address"},Accountnumber = "6543219",Transferaccount = "1"}; 
    IRepository repo2 = new Repository(session); 
    repo2.Save(nw); 

오류 :

삽입 할 수 없습니다 : [BusinessObjects.Client # BusinessObjects.Client] [SQL은 : 클라이언트 INTO INSERT (coaddress, VALUE (?,?,?,?,?,?)]

답변

3

확실치 않지만 NHibernate 매핑을 사용하여 DB 스키마를 만들 때만 'NotNullable'및 'Default'매핑 속성을 지정했거나 영향을 미쳤다고 생각합니다. Hibernate가 당신의 DB에 삽입 할 것에 실제적인 효과가 없다.

일부 속성에 대한 기본값을 원한다면이 속성을 가진 클래스의 생성자에서 해당 속성을 기본값으로 지정해야한다고 생각합니다.

0

NHibernate 자체적으로 컴포넌트 매핑에 동적 인서트를 지원하지 않습니다. Fluent에서 누락 된 것이 아닙니다.

주소에이 기본 속성 값을 null이 아닌 빈 문자열로 설정하는 기본 생성자를 지정 하시겠습니까?

+0

생성자에서 기본 속성을 설정하면 삽입 오류가 발생합니다. 다음 문제는 무언가가 변경되지 않았을 때의 업데이트 전략입니다. 하나의 속성이 변경되면 전체 구성 요소가 업데이트되고 모든 개체 소비자가 모든 데이터를 필요로하지 않으므로 표준 접근 방식이 있어야합니다. –

0

NHibernate는 하나의 컴포넌트를 하나의 well ... 컴포넌트로 간주합니다 :-) 즉, 컴포넌트에 대한 동적 삽입을 수행하지 않습니다.

1

비슷한 문제가 발생했습니다.

CREATE TABLE MyTable 
(
... 
    InsertDate datetime not null default getdate() 
... 
) 

개체 속성 :

public DateTime? InsertDate{get;set;} 

매핑에서 내가 뭐하고 있었 : 데이터베이스는 기본 제약 조건이

Map(x => x.InsertDate).Column("InsertDate").Not.Nullable().Default("getdate()"); 

을하지만 그것을 변경 :

Map(x => x.InsertDate).Column("InsertDate").Generated.Insert(); 

null 인 경우 속성을 삽입하십시오.

관련 문제