簡體   English   中英

具有復合ID的自動映射不起作用

[英]Auto-Mapping with Composite ID Not Working

我正在使用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.MappingException:無法確定以下類型:iPFS.Core.Baan.BaanAlternateItemKey,iPFS.Core,Version = 0.0.4154.21888,Culture = neutral,PublicKeyToken = null,適用於以下列: 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");
    }
}

那不應該是嗎?:

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")
        .KeyProperty(x => x.AlternateItemId, "ALT_ITEM_ID");

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

此錯誤表明,映射引擎BaanAlternateItemKey類型的任何映射。 因此,請確保您有地圖。

我相信您會希望將AlternateItemId的KeyProperty映射轉換為KeyReference,然后刪除“引用”映射,如下所示。 這假定該Item也已經被映射,並且其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");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM