Соглашения об именах для использования 2 внешних ключей к одной таблице в Fluent NHibernate с использованием архитектуры Sharp Lite - PullRequest
0 голосов
/ 03 января 2012

Вот моя проблема.

У меня есть таблица клиентов и таблица адресов. Таблица клиентов имеет два внешних ключа к таблице адресов. ShippingAddressFK and BillingAddressFK

Обычно я бы просто имел AddressFK, если бы это был только один внешний ключ. Но так как сейчас два, я не уверен, как это сделать.

Я видел это: Свободное автоматическое отображение Nhibernate - 2 внешних ключа к одной таблице?

Но я не уверен, как перевести это в перезаписываемый файл CS с архитектурой Sharp Lite.

В примере с MyStore это было самое близкое, что я мог найти:

public class OrderOverride : IOverride
    {
        public void Override(ModelMapper mapper) {
            mapper.Class<Order>(map => map.Property(x => x.OrderStatus, 
                status => {
                    status.Type<OrderStatusCustomType>();
                    status.Column("OrderStatusTypeFk");
                }));
        }
    }

Я заметил, что они похожи. Я просто не уверен, как изменить приведенное выше решение, чтобы оно соответствовало классу переопределения такого рода в архитектуре Sharp Lite

Ответы [ 2 ]

0 голосов
/ 23 ноября 2012

Пример, на который вы ссылаетесь, заключается в сопоставлении одного из ваших свойств с пользовательским типом, например, Enum.

Вам необходимо сопоставить ваше отношение с несколькими адресами и указатьэто имя столбца, отличное от того, что было бы в ваших соглашениях.

public void Override(ModelMapper mapper)
{
    mapper.Class<Customer>(map =>
                           map.ManyToOne(
                               x => x.BillingAddress,
                               x => x.Column("BillingAddressFk")));

    mapper.Class<Customer>(map =>
                           map.ManyToOne(
                               x => x.ShippingAddress,
                               x => x.Column("ShippingAddressFk")));
}

Обратите внимание на ManyToOne вместо Property.

0 голосов
/ 04 января 2012

Нет доступа к visual studio, поэтому не пробовали, рассмотрите код psuedo, основанный на вставленном вами коде и коде в другом вопросе, на который вы ссылались:

public class CustomerOverride : IOverride
{
    public void Override(ModelMapper mapper) {
        mapper.Class<Customer>(map => map.Property(x => x.BillingAddress, 
            address => {
                address.Type<Address>();
                address.Column("BillingAddressFk");
            }));
        mapper.Class<Customer>(map => map.Property(x => x.ShippingAddress, 
            address => {
                address.Type<Address>();
                address.Column("ShippingAddressFk");
            }));
    }
}

Я только что посмотрел на Переопределение порядка в SharpLite , и это не беглый nhibernate, это отображение кода nhibernate, которое я никогда не использовал. это может быть неправильным способом определения нескольких переопределений свойств, но, надеюсь, приведенный выше код будет работать. если нет, измените тег fluentnhibernate на nhibernate, и кто-то, кто знает о нем больше, сможет помочь.

...