C# 将外键映射为主键Fluent NHibernate

C# 将外键映射为主键Fluent NHibernate,c#,fluent-nhibernate,composite-id,C#,Fluent Nhibernate,Composite Id,我有下表场景: 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 ta

我有下表场景:

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();
    }
}
public类映射:BaseMapping{
公共广告映射():基(“广告”){
Id(model=>model.Id).Not.Nullable().Unique().GeneratedBy.Identity();
Map(model=>model.Title).Not.Nullable().Length(100.Insert().Update();
}
}
公共类映射:BaseMapping{
公共AdertPhotoMapping():基(“AdertPhoto”){
Id(model=>model.Advert)
.栏(“Id”)
.由外国公司生成(“广告”);
Map(model=>model.Description).Nullable();
Map(model=>model.Photo).CustomSqlType(“image”).Not.Nullable();
引用(model=>model.Advert,“Advert”).Not.Nullable().Not.LazyLoad();
}
}
公共类BidMapping{//:BaseMapping{
public BidMapping():基本(“投标”){
Id(model=>model.Advert,“Advert”).GeneratedBy.Foreign(“Advert”);
复合ID()
.KeyReference(model=>model.Advert,“Advert”)
.KeyReference(model=>model.User,“User”);
映射(model=>model.Value).Not.Nullable().Insert().Update();
引用(model=>model.Advert,“Advert”).Not.Nullable().Not.LazyLoad();
}
}
好的,当Fluent NHibernate试图引用
AdvertPhotoMapping
类中的广告列时,我遇到了一个异常,我不知道
BidMapping
CompositeId是否正确映射

我得到的例外是:

{“无法为以下列确定类型:SYB.Engine.Entities.Advert,SYB.Engine,Version=1.0.0,Culture=neutral,PublicKeyToken=null:NHibernate.Mapping.Column(Advert)”}

我做错了什么?
谢谢大家!

通常,我会这样映射一对一关系:

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();
    }
}
CompositeId()
    .KeyReference(model => model.Advert, "Advert")
    .KeyReference(model => model.User, "User");

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