2011-02-02 5 views
0

를 사용하여 0에 하나의 관계 테이블에 1 개 관계 구성 여기 내 클래스입니다 :능통 자 NHibernate

public class User { 
    public virtual int Id { get; private set;} 
    public virtual IList<Bike> { get; set;} 
} 

public class Bike { 
    public virtual int Id { get; private set;} 
    public virtual string color { get; set;} 
} 

public class Accident{ 
    public virtual int Id { get; private set;} 
    public virtual User User{ get; set;} 
    public virtual Bike Bike{ get; set;} 
} 

그리고 내 테이블

  • 사용자 : 아이디
  • 자전거 : 아이디, 색상, 사용자 (fk)
  • Accident : Id
  • AccdentOccurance : AccidentId, UserId, BikeId

사고는 자전거 (자전거 사용자에게 함축적) 또는 사용자와 관련 될 수 있지만 자전거는 아닙니다. 내 질문은 사고 클래스 맵을 AccidentOccurance 테이블과 함께 사용하도록 구성하는 방법입니다.

희망 하시겠습니까?

답변

0
Lets see if I can get this right so it is helpful to you. 

1. On the 3rd line, you left out "Bike" for the name you are assigning the 
    relation to. 
2. Lines 4, 10 & 11, you were missing the reverse mappings. 
    I added them with the following assumptions: 
    a. A user can ride more than 1 bike. 
    b. A user can be in more than 1 accident. 
    c. A bike can be involved in more than 1 accident. 
    d. A bike can only be used by 1 user. 
     If you need the bike to be able to be used by more than 1 user 
     change line 10 to: public virtual IList<User> User { get; set;} 
     This will give you a Many to Many relationship. 
3. I would merge the tables Accident and AccidentOccurance into 1 table 
    "Accident". Since if you kept them separated, you are looking at a 1 to 1 
    relationship that does not offer any special benefits. With the vast 
    majority of all 1 to 1 relationships, it is best to merge the tables to 
    limit the SQL queries and speed up your queries on large tables. 


public class User { 
    public virtual int Id { get; private set;} 
    public virtual IList<Bike> Bike { get; set;} // Modified 
    public virtual IList<Accident> Accident { get; set;} // Added 
} 

public class Bike { 
    public virtual int Id { get; private set;} 
    public virtual string color { get; set;} 
    public virtual User User { get; set;} // Added 
    public virtual IList<Accident> Accident { get; set; } // Added 
} 

public class Accident{ 
    public virtual int Id { get; private set;} 
    public virtual User User{ get; set;} 
    public virtual Bike Bike{ get; set;} 
} 
+0

안녕하세요. 정교한 답변 주셔서 감사합니다. 내가 깨닫게 된 것은 내가 불안정한 테이블 디자인을 가지고 있으며, nhibernate를 사용하여 맵핑을 시도하는 것은 nhibernate가 논리적 테이블 디자인을 필요로하기 때문에 고통스런 것이다. 네가 제안한대로 테이블을 바꿀 거라 생각해. 고마워. – Bugman

관련 문제