我使用的是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,列: NHibernate.Mapping.Column(Id)
我不知道我做错了什么。有什么建议吗?
更新:如果我使用fluent贴图来映射它,它可以很好地工作:
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");
}
}发布于 2011-05-18 22:10:10
这不应该是这样的吗?
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。
发布于 2011-05-18 22:30:21
我相信您会希望将AlternateItemId的KeyProperty映射转换为KeyReference,然后删除引用映射,如下所示。这假设该项目也已被映射,并且指定了一个与ALT_ITEM_ID值匹配的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");
}
}https://stackoverflow.com/questions/6045970
复制相似问题