Автоматическое сопоставление с составным идентификатором не работает - PullRequest
0 голосов
/ 18 мая 2011

Я использую инфраструктуру Sharp-Architecture, и у меня есть объект, который выглядит следующим образом:

public class BaanAlternateItemKey : ValueObject
{
    public virtual string ItemId { get; protected set; }

    public virtual string AlternateItemId { get; protected set; }
}

public class BaanAlternateItem : EntityWithTypedId<BaanAlternateItemKey>, IAlternateItem
{
    #region IAlternateItem Members

    public virtual IItem Item { get; protected set; }

    public virtual int Priority { get; protected set; }

    public virtual DateTime ExpirationDate { get; protected set; }

    #endregion
}

У меня есть автоматическое переопределение, которое выглядит так:

public class BaanAlternateItemAutoMappingOverride : IAutoMappingOverride<BaanAlternateItem>
{
    public void Override(AutoMapping<BaanAlternateItem> mapping)
    {
        mapping.ReadOnly();

        mapping.Table("VIEW_BAAN_ALTERNATE_ITEMS");

        mapping.CompositeId<BaanAlternateItemKey>(x => x.Id)
            .KeyProperty(x => x.ItemId, "ITEM_ID")
            .KeyProperty(x => x.AlternateItemId, "ALT_ITEM_ID");

        mapping.References<BaanItem>(x => x.Item, "ALT_ITEM_ID");
    }
}

Я получаю это исключение:

----> NHibernate. .Column (Id)

Понятия не имею, что я делаю не так. Есть предложения?

ОБНОВЛЕНИЕ: если я сопоставляю это с помощью беглого отображения, оно работает нормально:

public class BaanAlternateItemMap : ClassMap<BaanAlternateItem>
{
    public BaanAlternateItemMap()
    {
        ReadOnly();

        Table("VIEW_BAAN_ALTERNATE_ITEMS");

        CompositeId<BaanAlternateItemKey>(x => x.Id)
            .KeyProperty(x => x.ItemId, "ITEM_ID")
            .KeyProperty(x => x.AlternateItemId, "ALT_ITEM_ID");

        Map(x => x.Priority, "PRIORITY");
        Map(x => x.ExpirationDate, "EXPIRATION_DATE").CustomType("Timestamp");

        References<BaanItem>(x => x.Item, "ALT_ITEM_ID");
    }
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

Полагаю, вы захотите преобразовать сопоставление KeyProperty для AlternateItemId в KeyReference, а затем удалить сопоставление References, как показано ниже.Предполагается, что элемент также сопоставлен, и у него есть назначенное свойство Id, соответствующее значению ALT_ITEM_ID.

public class BaanAlternateItemAutoMappingOverride : IAutoMappingOverride<BaanAlternateItem>
{
    public void Override(AutoMapping<BaanAlternateItem> mapping)
    {
        mapping.ReadOnly();

        mapping.Table("VIEW_BAAN_ALTERNATE_ITEMS");

        mapping.CompositeId<BaanAlternateItem>(x => x.Id) //are you mapping BaanAlternateItem right?
            .KeyProperty(x => x.ItemId, "ITEM_ID")
            .KeyReference(x => x.Item, "ALT_ITEM_ID");
    }
}
0 голосов
/ 18 мая 2011

Разве это не должно быть так:Поэтому убедитесь, что у вас есть карта для этого.

...