2010-11-30 4 views
3

내 MVC 프로젝트 중 하나에서 ConfORM Nhibernate를 사용하고 있습니다. 그리고 일대 다 매핑 (One to Many Mappings)에 문제가있었습니다.ConforM Nhibernate OneToManyKeyColumnApplier 문제

 IEnumerable<Type> domainEntities = this.GetDomainEntities(); 

     var relationalMapper = new ObjectRelationalMapper(); 
     relationalMapper.TablePerConcreteClass(domainEntities); 
     relationalMapper.Patterns.PoidStrategies.Add(new NativePoidPattern()); 
     relationalMapper.Cascade<Category, Product>(Cascade.All); 
     relationalMapper.ManyToMany<Category, Product>(); 
     relationalMapper.Cascade<Order, Product>(Cascade.Persist); 

     var mapper = new Mapper(relationalMapper); 
     var englishInflector = new EnglishInflector(); 

     mapper.PatternsAppliers.Merge(new ClassPluralizedTableApplier(englishInflector)); 
     mapper.PatternsAppliers.Merge(new OneToManyKeyColumnApplier(relationalMapper)); 
     ..... 

     HbmMapping mapping = mapper.CompileMappingFor(domainEntities); 

클래스 주문 및 사용자 : 한 명의 사용자가 많은 주문을 받았습니다.

public class Order : BaseEntity 
{ 
    public Order(User user) 
    { 
     if (user == null) 
     { 
      throw new ArgumentNullException("user"); 
     } 

     this.User = user;   
    } 

    protected Order() 
    { 
    } 

    public virtual User User { get; protected set; }  
} 

그리고 사용자 :

public class User : BaseEntity 
{ 
    public User() 
    { 
     this.Orders = new HashedSet<Order>(); 
    } 

    public virtual string FirstName { get; set; }  

    public virtual ISet<Order> Orders { get; protected set; } 
} 

나는 관계 같은 기대 : Orders.UserId -> User.Id DB를한다.

table structure

UPS 다음 NHibernate에이 DB genereted했을 때 그러나 우리는이 문제를 (이미지 참조)했다. 이중 참조 User와 UserId가 갑자기 위로 올라갔습니다. 그리고 우리가 [사용자]를 제거하면 Nhivernate는이 테이블을 내부 조인 할 수 없습니다. 그 슬픈 두 번 : '사용자'열 이름이 잘못되었습니다. '사용자'열 이름이 잘못되었습니다.

ConfORM을 설정하는 데 몇 가지 문제가 있다고 생각합니다. mapper.PatternsAppliers.Merge (new OneToManyKeyColumnApplier (relationalMapper))를 제거한 경우; 단지 [사용자] 참조 키입니다.

누구나 여기에 무슨 문제가 있는지 알 수 있습니까? 미리 감사드립니다.

답변

2

당신은 열 이름은 사용자 측에서 변경 되었기 때문에

mapper.PatternsAppliers.Merge(new ManyToOneColumnApplier()); 

은 아마 이잖아 다음 적용자을 추가 할 필요가 있지만, 주문 측에서 변경되지 않았습니다.