Nhibernate nHib 3.2通过复合密钥上的代码连接进行映射

Nhibernate nHib 3.2通过复合密钥上的代码连接进行映射,nhibernate,nhibernate-mapping,mapping-by-code,Nhibernate,Nhibernate Mapping,Mapping By Code,我的(遗留,无法更改)架构在用户和用户地址之间具有一对一的关系,具有一个复合键: Users: - username (PK) - email (PK) - firsname - lastname UsersAddresses: - username (PK, FK) - email (PK, FK) - city - street 我最初的想法是使用尝试列而不是列——它需要任意数量的列映射lambda来允许映射跨越多个列的对象,如您的键: Join("UsersAddresses", j

我的(遗留,无法更改)架构在用户和用户地址之间具有一对一的关系,具有一个复合键:

Users:
- username (PK)
- email (PK)
- firsname
- lastname

UsersAddresses:
- username (PK, FK)
- email (PK, FK)
- city
- street

我最初的想法是使用
尝试
而不是
——它需要任意数量的列映射lambda来允许映射跨越多个列的对象,如您的键:

Join("UsersAddresses", j =>
{
    j.Table("UsersAddresses");
    j.Fetch(FetchKind.Join);
    j.Optional(false);
    j.Key(k =>
    {
        k.Columns(c =>
        {
            c.Name("username");
            c.ForeignKey("username_fk");
        }, c =>
        {
            c.Name("email");
            c.ForeignKey("email_fk");
        });
    });
});

c
属于类型
IColumnMapper
,它不定义
ForeignKey
函数。还有其他想法吗?嗯,你是对的。因此,似乎没有办法为复合键定义外键名称。但是你为什么要在意呢,你说过你的数据库是遗留的,不能更改,而且在模式导出的情况下只需要设置外键名就可以了,而你不需要这样做。哦,因此,在我对代码映射的理解中,基本上缺少了一点:如何告诉NHib在
usersaddress
中引用了
Users
中的哪一列?(即
username->username\u fk
等)我认为顺序很重要。如果在
用户
中将用户名和电子邮件属性定义为复合键,则在键的
方法中,列定义的顺序应该相同。
Join("UsersAddresses", j=>
                {
                    j.Table("UsersAddresses");
                    j.Fetch(FetchKind.Join);
                    j.Optional(false);
                    j.Key(k=>
                            {
                    //What here???                                          
                    k.Column(c=>
                        {
                            c.Name("");
                            c.Name("");
                        });
                    k.ForeignKey("");
                    k.ForeignKey("");
                });

                                });
Join("UsersAddresses", j =>
{
    j.Table("UsersAddresses");
    j.Fetch(FetchKind.Join);
    j.Optional(false);
    j.Key(k =>
    {
        k.Columns(c =>
        {
            c.Name("username");
            c.ForeignKey("username_fk");
        }, c =>
        {
            c.Name("email");
            c.ForeignKey("email_fk");
        });
    });
});