2014-04-12 6 views
2

I 다음 표 시나리오가 있습니다매핑 외래 키 등 기본 키 유창함 NHibernate에

User 
    - Id  (PK) 
    - Username 

Advert 
    - Id (PK) 
    - Title 

AdvertPhoto 
    - Advert (PK) (Also a FK for Advert table) 
    - Image 

Bid 
    - Advert (PK) (Also a FK for Advert table) 
    - User (PK) (Also a FK for User table) 
    - Value 

좋아, 나는 아래의 코드와 이들 엔티티 매핑하기 위해 노력하고있어 :

public class AdvertMapping : BaseMapping<Advert> { 
    public AdvertMapping() : base("Advert") { 
     Id(model => model.Id).Not.Nullable().Unique().GeneratedBy.Identity(); 
     Map(model => model.Title).Not.Nullable().Length(100).Insert().Update(); 
    } 
} 

public class AdvertPhotoMapping : BaseMapping<Advert> { 
    public AdvertPhotoMapping() : base("AdvertPhoto") { 
     Id(model => model.Advert) 
      .Column("Id") 
      .GeneratedBy.Foreign("Advert"); 

     Map(model => model.Description).Nullable(); 
     Map(model => model.Photo).CustomSqlType("image").Not.Nullable(); 
     References(model => model.Advert, "Advert").Not.Nullable().Not.LazyLoad(); 
    } 
} 

public class BidMapping { //: BaseMapping<Bid> { 
    public BidMapping() : base("Bid") { 
     Id(model => model.Advert, "Advert").GeneratedBy.Foreign("Advert"); 
      CompositeId() 
       .KeyReference(model => model.Advert, "Advert") 
       .KeyReference(model => model.User, "User"); 

      Map(model => model.Value).Not.Nullable().Insert().Update(); 
      References(model => model.Advert, "Advert").Not.Nullable().Not.LazyLoad(); 
    } 
} 

확인을, I Fluent NHibernate가 AdvertPhotoMapping 클래스의 Advert 란을 참조하려고 할 때 예외가 생기고 BidMapping CompositeId가 제대로 매핑되었는지 알 수 없습니다.

내가 가진 예외입니다 : 내가 잘못 뭐하는 거지

{"Could not determine type for: SYB.Engine.Entities.Advert, SYB.Engine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, for columns: NHibernate.Mapping.Column(Advert)"}

? 감사합니다. 또한이 BidMapping에서 참조 매핑을 필요가 없습니다

public class AdvertPhotoMapping : BaseMapping<Advert> { 
    public AdvertPhotoMapping() : base("AdvertPhoto") { 
     Id(model => model.Advert) 
      .Column("Id") 
      .GeneratedBy.Foreign("Advert"); 

     Map(model => model.Description).Nullable(); 
     Map(model => model.Photo).CustomSqlType("image").Not.Nullable(); 
     HasOne(model => model.Advert).Constrained(); 
    } 
} 

public class AdvertMapping : BaseMapping<Advert> { 
    public AdvertMapping() : base("Advert") { 
     Id(model => model.Id).Not.Nullable().Unique().GeneratedBy.Identity(); 
     Map(model => model.Title).Not.Nullable().Length(100).Insert().Update(); 
     HasOne(x => x.AdvertPhoto).Cascade.All(); 
    } 
} 

:

답변

1

일반적으로이 내가 일대일 관계를 매핑하는 것이 방법이다. 다음과 같이 표시되어야합니다.

CompositeId() 
    .KeyReference(model => model.Advert, "Advert") 
    .KeyReference(model => model.User, "User"); 

    Map(model => model.Value).Not.Nullable().Insert().Update();