首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合ID不起作用的自动映射

复合ID不起作用的自动映射
EN

Stack Overflow用户
提问于 2011-05-18 22:00:55
回答 2查看 890关注 0票数 0

我使用的是Sharp-Architecture框架,我有一个如下所示的实体:

代码语言:javascript
复制
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
}

我有一个自动映射覆盖,如下所示:

代码语言:javascript
复制
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,列: NHibernate.Mapping.Column(Id)

我不知道我做错了什么。有什么建议吗?

更新:如果我使用fluent贴图来映射它,它可以很好地工作:

代码语言:javascript
复制
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");
    }
}
EN

回答 2

Stack Overflow用户

发布于 2011-05-18 22:10:10

这不应该是这样的吗?

代码语言:javascript
复制
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的任何映射一无所知。因此,请确保您有它的map。

票数 0
EN

Stack Overflow用户

发布于 2011-05-18 22:30:21

我相信您会希望将AlternateItemId的KeyProperty映射转换为KeyReference,然后删除引用映射,如下所示。这假设该项目也已被映射,并且指定了一个与ALT_ITEM_ID值匹配的Id属性。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6045970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档