编程语言
首页 > 编程语言> > c# – 两个表oneToMany的FluentNhibernate映射在映射中使用唯一的主键instea

c# – 两个表oneToMany的FluentNhibernate映射在映射中使用唯一的主键instea

作者:互联网

我正在用C#编写桌面项目.我正在使用Nhibernate与数据库进行通信.此外,我使用FluentNhibernate进行模型映射,但我陷入了映射的某些部分.这是ProductMap中的My mapping Class

松动地图

   public LosingMap()
        {
            Id(x => x.id);
            Map(x => x.reason);
            Map(x => x.quantity);
            Map(x => x.lose_sum);
            Map(x => x.rate);
            Map(x => x.deleted);
            Map(x => x.create_date);
            Map(x => x.update_date);
            References(x => x.currency).Column("CurrencyCode");
            Table("Loosing");


        }
    }

这是CurrencyMap

CurrencyMap

public CurrencyMap()
    {

        Id(x => x.id);
        Map(x => x.code).UniqueKey("currency_code");


        Map(x => x.name);
        Map(x => x.shname);
        Map(x => x.symbol);
        Map(x => x.deleted);
        HasMany(x => x.Losings).Cascade.All();
        Table("currency");
    }
}

这里是我在我的货币表中有一个主键和一个唯一键我怎么能在我的LoosingMap类中引用我的唯一而不是主键???

解决方法:

使用CurrencyMap上的KeyColumn:

public CurrencyMap()
    {

        Map(x => x.id); // Optional
        KeyColumn(x => x.code)


        Map(x => x.name);
        Map(x => x.shname);
        Map(x => x.symbol);
        Map(x => x.deleted);
        HasMany(x => x.Losings).Cascade.All();
        Table("currency");
    }
}

根据FluentNHibernate “HasMany / one-to-many” documentation,“与引用一样,外键默认为Author_id,您可以使用KeyColumn方法覆盖它或使用约定更改默认行为.”,因此您还可以使用:

HasMany(x => x.Losings).KeyColumn(x => x. CurrencyCode).Cascade.All();

标签:c,nhibernate,fluent-nhibernate,nhibernate-mapping
来源: https://codeday.me/bug/20190522/1152720.html