nHib 3.2通过代码连接映射到复合键

时间:2012-03-29 13:15:29

标签: nhibernate nhibernate-mapping mapping-by-code

My(遗留,无法更改)架构在User和UserAddress之间具有一对一的关系,并带有复合键:

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

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

我最初的想法是使用<join将它们全部带到同一个类:

public class UserDTO
    {
        public string Username { get; set; }
        public string Email { get; set; }

        public string FirstName { get; set; }
        public string City { get; set; }
        //etc...

    }

但我不知道映射:

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

                                });

有没有办法实现这个目标?或许我应该选择组件或一对一映射...

1 个答案:

答案 0 :(得分:0)

尝试使用Columns而不是Column - 它需要任意数量的列映射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");
        });
    });
});