2014-04-12 9 views
2

У меня есть следующая таблица сценария:Отображение внешнего ключа в качестве первичного ключа Fluent 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(); 
    } 
} 

Ok, I Получает исключение, когда Fluent NHibernate пытается ссылаться на столбец «Объявления» в классе AdvertPhotoMapping, и я не знаю, правильно ли сопоставлен 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)"}

Что я делаю неправильно? Спасибо всем!

ответ

1

Вообще это, как я бы сопоставить один на один зависимости:

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(); 
    } 
} 

Также вам не нужно отображение Ссылки на BidMapping. Это должно выглядеть так:

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

    Map(model => model.Value).Not.Nullable().Insert().Update(); 
Смежные вопросы