映射异常nHibernate NPA与EmbeddedId和OneToMany

时间:2016-12-07 18:04:11

标签: c# jpa nhibernate

我用JPA对此进行了标记,因为JPA和NPA之间的API应该相同,即设置应该相同。在你的脑海中用@替换[]:)

我的数据库中有一个OneToMany关系,我正在尝试映射到某些Entity类。 “很多”方面有一个复合PK,它给了我一些问题。我想我正在做的一切正确,但是我在初始化会话时遇到异常。我正在使用JPA的.NET端口来获取基于属性的映射。

  

无法确定以下类型:   Mariner.Entities.MinimumOrderAmounts.Zone,   Mariner.Data,用于列:   NHibernate.Mapping.Column(区)

以下是相关代码。

[Entity]
[Table(Catalog = "Atom", Schema = "mariner", Name = "MinimumOrderAmountZone")]
public class Zone  {

    [Id]
    [GeneratedValue(Strategy = GenerationType.IDENTITY)]
    public virtual int Id { get; protected set; }

    [Length(500, Min = 1)]
    [NotNull]
    public virtual string Name { get; set; }

    [Length(4000)]
    public virtual string Description { get; set; }

    [OneToMany(MappedBy = nameof(ZoneItem.Zone), Cascade = new[] { CascadeType.ALL })]
    public virtual ISet<ZoneItem> ZoneItems { get; protected set; }

    [OneToMany(MappedBy = nameof(ZoneSchedule.Zone), Cascade = new[] { CascadeType.ALL })]
    public virtual ISet<ZoneSchedule> ZoneSchedules { get; protected set; }        

}

[Entity]
[Table(Catalog = "Atom", Schema = "mariner", Name = "MinimumOrderAmountZoneItem")]
public class ZoneItem {

    [EmbeddedId]
    public virtual ZoneItemId Id { get; set; } 

    [MapsId("Zone")]
    [ManyToOne]
    [JoinColumn(Name = "ZoneId")]
    public virtual Zone Zone { get; set; }

}

[Serializable]
[Embeddable]
public class ZoneItemId {

    [Column(Name ="ZoneId")]
    public virtual Zone Zone { get; set; } 

    public virtual string ItemId { get; set; }

    [Enumerated(EnumType.ORDINAL)]
    [Column(Name ="ItemTypeId")]
    public virtual ItemType ItemType { get; set; }

} 

以下是相关的Nuget套餐:

<package id="NHibernate" version="4.0.4.4000" targetFramework="net45" />
<package id="NHibernate.Validator" version="2.0.0.4002" targetFramework="net45" />
<package id="NPersistence" version="2.1.0.11" targetFramework="net45" />

帮助!

1 个答案:

答案 0 :(得分:0)

我最后只是添加一个代理键列并将其映射。 NPA似乎不支持这一点(这并不奇怪,因为它在3年内没有更新......也许现在是时候转向别的了。