S # arp-архитектура, NHibernate несколько баз данных с типизированным идентификатором - PullRequest
4 голосов
/ 02 августа 2010

У меня есть несколько баз данных в моем проекте SharpArchitecture, и я следовал приведенному здесь руководству:

http://wiki.sharparchitecture.net/FAQ.ashx

Все отлично работает, кроме моих сущностей с назначенными идентификаторами. Я получаю «базу данных уже настроена» при попытке запуска приложения. Через некоторое копание я получаю:

«Идентификационный тип должен быть целым (int, long, uint, ulong)»

public void Apply(FluentNHibernate.Conventions.Instances.IIdentityInstance instance)
        {
            instance.Column("Id");
            instance.UnsavedValue("0");
            instance.GeneratedBy.HiLo("1000");
        }

Это выбрасывается во время instance.GeneratedBy.HiLo("1000"); Это странно, так как я сопоставляю присвоенный идентификатор и строку. Кажется, он игнорирует мою назначенную карту идентификаторов:

[SessionFactory(DataGlobals.SecondDbFactoryKey)]
public class SecondDbEntityMap: IAutoMappingOverride<SecondDbEntity>
{
    public void Override(AutoMapping<SecondDbEntity> mapping) {
        mapping.Id(x => x.AssignedIdProperty).GeneratedBy.Assigned();
    }
}

Это отображение должно работать, верно? У меня есть несколько назначенных идентификаторов сущностей в моей первой базе данных, и они отображаются одинаковым образом (атрибут фабрики сессий) и работают нормально. Я не могу понять это.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2010

HiLo - это генераторная стратегия, которая должна назначать идентификаторы, если вы назначаете их самостоятельно, вместо этого вы хотите использовать назначенную стратегию.

Sharp Arch, поставляется с набором по умолчанию автоматических сопоставлений fluentNh, я думаю, вам нужно проверить код загрузчика, куда он загружает автоматические сопоставления, и либо настроить их, либо переопределить их там.Дайте мне знать, если у вас все еще есть проблемы, я был бы рад взглянуть на ваш код.

0 голосов
/ 13 августа 2010

Я думаю, это потому, что генератор HiLo может работать только с целочисленными типами - поэтому, если назначенный вами идентификатор является строковым типом, вам понадобится другой метод для генерации идентификатора.

...