2012-11-27 1 views
1

부모 테이블과 하위 테이블이 있고 엔티티가 일대 다 관계를 사용하여 만들어지고 매핑됩니다. 한면에서 여러면에서 Inverse()를 사용할 때 자식 테이블의 외래 키 값이 null로 삽입됩니다. Inverse() 하나의 새로운 기록을 문제없이 삽입 및 외래 키가 문제없이 삽입되어 많은 제거되지만Inverse를 사용할 때 Fluent nhibernate 일대 다 자영표 테이블의 외래 키가 null입니다.

public class TableA 
{ 
    public virtual long ID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<TableB> TableB { get; set; } 
} 

public class TableB 
{ 
    public virtual long ID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual TableA TableA { get; set; } 
} 

public class TableAMap : ClassMap<TableA> 
{ 
    public TableAMap() 
    { 
     Id(x=>x.ID); 
     Map(x=>x.Name).Column("Name"); 
     HasMany(x=>x.TableB) 
      .KeyColumn("TableA_ID") 
      .Inverse() 
      .Cascase.All() 
      .Not.LazyLoad(); 
    } 
} 

public class TableBMap : ClassMap<TableB> 
{ 
    public TableBMap() 
    { 
     Id(x=>x.ID); 
     Map(x=>x.Name).Column("Name"); 
     References(x=>x.TableA).Column("TableA_ID").Not.LazyLoad(); 
    } 
} 

나는 기존 레코드의 외래 키는 레코드를 업데이트 할 때 null로 대체되었습니다.

비슷한 질문을 들었지만 도움이되지 않도록 도와주세요.

Fluent NHibernate one-to-many relationship setting foreign key to null

+0

당신은 당신의 진짜 매핑을 게시해야해야한다. 당신의'HasMany (x => x.TableB) .KeyColumn ("TableA_ID"). Inverse(). Cascase.All(). Not.LazyLoad();'가''와 함께 작동하지 않는 것 같습니다. – Origin

+0

예. 나는 HasMany (x => x.TableB) .KeyColumn ("TableA_ID")으로 수정했다. Inverse() .Cascase.All(). NotLazyLoad(); ' – Desmond

+0

이 예제는 해독하기 어렵다. . 다시 말하지만, 실제 코드 (또는 하위 세트)와 현재 작업중인 스키마를 게시해야한다고 생각합니다. – Origin

답변

1

이 삽입 코드를 보지 않고 정확히 얘기하기 어렵다. 그러나 내 수정 구슬은 아마도 마지막 줄을 잊어 버렸다고 말해줍니다.

Parent parent = new Parent(); 
Child child = new Child(); 
parent.Children.Add(child); 
child.Parent = parent;  <-- this is important because this will maintain the foreign key 
2

이 문제의 해결책이있는이 링크를 참고하십시오.

Reffer this Solution link

MAPP 클래스는

public class TableAMap : ClassMap<TableA> 
{ 
    public TableAMap() 
    { 
     Id(x=>x.ID); 
     Map(x=>x.Name).Column("Name"); 
     HasMany<TableB>(x=>x.TableB) 
      .KeyColumn("TableA_ID") 
      .Cascase.All().Inverse(); 
    } 
} 

public class TableBMap : ClassMap<TableB> 
{ 
    public TableBMap() 
    { 
     Id(x=>x.ID); 
     Map(x=>x.Name).Column("Name"); 
     References<TableA>(x=>x.TableA).Column("TableA_ID").Not.Nullable(); 
    } 
} 
관련 문제