Отображение nHib 3.2 по объединению кода на составном ключе - PullRequest
1 голос
/ 29 марта 2012

Моя (устаревшая, не может быть изменена) схема имеет взаимно-однозначное отношение между пользователем и 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 голосов
/ 30 марта 2012

Попробуйте использовать Columns вместо Column - требуется любое количество лямбда-выражений для сопоставления столбцов, чтобы разрешить сопоставление объектов, охватывающих несколько столбцов, например ваш ключ:

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