2017-02-10 5 views
0

나는 모델NHibernate에 매핑, 매핑 개체

public class Car : Entity<int> 
{ 
    public virtual int Id{ get; set; } 
    ... 
    public virtual Engine Engine { get; set; } 

} 

다음하고 나는이지도 엔진 개체 CarMap 방법 nhibernate mapping by code approach

public class CarMap : ClassMapping<Car> 
{ 
    public CarMap() 
    { 
     Id(x => CarId, m => m.Generator(Generators.Identity)); 
     // how map reference Engine? 
     **// edit** 
     HasOne(x=>x.Engine, m=>{}) // is this good enough? 

    } 
} 

을 사용하고 있습니다?

답변

0

, 내가 분명히 ManyToOne()mapping-by-code equivalent이있는, References()을 사용 유창함 NH 사용.

+0

정말 ManyToOne이 아닌 OneToOne입니까? – user1765862

+0

나는 코드 별 매핑을 사용하지 않았고, 나는 단지 링크 된 기사에서 말하는 것과 마찬가지이다. 2012 년 이후로 상황이 바뀔 수도 있습니다 ... –

+0

감사합니다 ....,. ,,, – user1765862

1

질문에 조금 더 많은 정보가 필요하지만 몇 가지 옵션이 있습니다.

이것은 정말로 일대일 관계입니까? 일대일 관계는 관계의 양측이 동일한 ID를 공유하는 경향이 있다는 점에서 다소 독창적입니다. 데이비드 오스본 (David Osborne)은 1 대 1 관계를 원한다고 말했다. 하지만 당신은 그것을 양방향으로 원하십니까? 즉, 엔진에서 해당 엔진을 가진 모든 자동차까지 또는 자동차에서 특정 엔진까지 탐색 할 수 있습니다. 즉 엔진은 Chrysler Hemi 엔진 5.7L이며 자동차, 램 픽업, Dodge Durango, Dodge Charger에 있습니다. 그런 다음

당신은 그래서 당신은 당신이 자동차 매핑 목록을 정의하는 데 필요한 엔진 매핑하는 경우이

public class Engine : Entity<int> 
{ 
    public Engine() 
    { 
     Cars = new List<Car>(); 
    } 

    public virtual int Id { get; protected set; } 
    public virtual decimal Displacement { get; set; } 
    //more properties 

    public virtual IList<Car> Cars { get; } 

    public virtual void AddCar(Car car) 
    { 
     if (Cars.Contains(car)) return; 

     Cars.Add(car); 
    } 

    public virtual void RemoveCar(Car car) 
    { 
     if (!Cars.Contains(car)) return; 

     Cars.Remove(car); 
    } 
} 

public class Car : Entity<int> 
{ 
    public virtual int Id { get; set; } 
    public virtual Engine Engine { get; set; } 

} 

같은 객체를 매핑 할 수도 있습니다

 Bag(x => x.Cars, map => 
     { 
      map.Key(k => k.Column(col => col.Name("EngineId"))); 
      map.Cascade(Cascade.All | Cascade.DeleteOrphans); //optional 
     }, 
      action => action.OneToMany()); 

과의 다른면 이와 같은 관계

 ManyToOne(x => x.Engine, map => 
     { 
      map.Column("EngineId"); 
      map.NotNullable(true); // if you require the Engine to be in a car 
     }); 

자동차에서 en까지의 편도 매핑 만하려는 경우 gine, Cars 목록에 대한 모든 참조를 제거하고 Bag 매핑을 삭제하십시오.