非主键的流畅Nhibernate一对一映射

Dharmendra Verma

无法找出下表的正确映射。

  Table: ItemSale    {ItemCode, SaleDate, Qty, SaleCode}  
         ItemCode and SaleDate are composite key.
         SaleCode is a derived column, generated from the combination of ItemCode and SaleDate column. 

  Table: ItemSaleDetail {SaleCode, Agent}
         SaleCode is a primary key and foreign key from ItemSale table for SaleCode column.

实体及其映射如下。

商品销售

public class ItemSale
{
    public virtual string ItemCode { get; set; }
    public virtual string Date { get; set; }
    public virtual string  SaleCode { get; set; }
    public virtual ItemSaleDetail SaleDetail { get; set; }
}

public class ItemSaleMap : ClassMap<ItemSale>
{
    public ItemSaleMap()
    {
        Table("ItemSale");
        CompositeId()
          .KeyReference(x => x.ItemCode, "ItemCode")
          .KeyProperty(x => x.Date, "SaleDate");
        HasOne(x => x.SaleDetail).Cascade.All();
    }
}

ItemSaleDetail

public class ItemSaleDetail
{
    public virtual string ItemSaleCode { get; set; }
    public virtual string Agent { get; set; }
    public virtual ItemSale SaleParent { get; set; }

}

public class ItemSaleDetailMap : ClassMap<ItemSaleDetail>
{
    public ItemSaleDetailMap()
    {
        Table("ItemSaleDetail");
        Id(x => x.ItemSaleCode).GeneratedBy.Foreign("SaleParent");
        Map(x => x.Agent, "Agent");
        HasOne(x => x.SaleParent).Constrained(); 
    }
}

我已经在上面给出了以传统方式使用的基本一对一映射,我知道在这种情况下是错误的。请建议在这种情况下如何提供适当的映射。同样,如果应用程序将生成派生列SaleCode,我们如何在我的实体中拥有此属性。由于不允许单个列具有多个映射。

拉迪姆·科勒

好的,有了可分配的ID,我们可以这样做。首先,我们应该确保已分配ID,因此我们可以<id> ItemSaleCode像这样调整getter

public class ItemSaleDetail
{
    string _itemSaleCode;

    public virtual string ItemSaleCode
    {
        get { return _itemSaleCode ?? SaleParent.SaleCode ; }
        set { _itemSaleCode  = value; }
    }

现在,我们需要这样的映射:

<id name="ItemSaleCode" column="SaleCode" type="String" generator="assigned" />
<one-to-one name="SaleParent" class="ItemSale"
    constrained="true" property-ref="SaleCode" />
...

...

在Fluent中应该是这样的:

public ItemSaleDetailMap()
{
    ...
    Id(x => x.ItemSaleCode)
        .CustomType<String>()
        .Column("SaleCode")
        .GeneratedBy.Assigned();

    HasOne(x => x.SaleParent)
       .ProeprtyRef("SaleCode")
       .Constrained(); 
}


public ItemSaleMap()
{
    References(x => x.SaleDetail)
       .Column("SaleCode")
       .Unique()
       .Cascade.All();
    Map(x => x.SaleCode)
       .Column("SaleCode")
       .Not.Update()
       .Not.Insert()
}

但是同样,我肯定会使用代理INT或LONG键...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NHibernate与外键关联一对一映射

来自分类Dev

nhibernate一对一映射,而不是null =“ false”?

来自分类Dev

流利的NHibernate映射:一对一(或无)

来自分类Dev

NHibernate与外键关联一对一映射

来自分类Dev

在非主键上一对多映射

来自分类Dev

在非主键上一对多映射

来自分类Dev

在另一个充当主键的实体上休眠一对一映射

来自分类Dev

在单个表中的复合外键和主键上休眠一对一映射

来自分类Dev

休眠中具有相同主键的一对一单向映射

来自分类Dev

将 Doctrine 的一对一关系映射为 XML 中的主键

来自分类Dev

Hibernate:在非主键列上一对多映射

来自分类Dev

NHibernate一对一映射-不保存完整对象图

来自分类Dev

双向一对一映射

来自分类Dev

Hibernate中的一对一映射

来自分类Dev

一对一休眠映射

来自分类Dev

一对一映射问题

来自分类Dev

休眠一对一映射

来自分类Dev

JPA与非主键一对一给出无法找到具有逻辑名称错误的列

来自分类Dev

流利的NHibernate多对一/一对一

来自分类Dev

如何声明主键都是一对一的字段?

来自分类Dev

Hibernate映射例外:一对一映射

来自分类Dev

nHibernate一对一属性加载时为null

来自分类Dev

一对一(多对一)的Hibernate映射xml

来自分类Dev

流利的NHibernate一对多映射

来自分类Dev

休眠一对一映射。模式生成问题

来自分类Dev

一对一映射休眠且不为null

来自分类Dev

FOSUserBundle一对一映射的实体未保存

来自分类Dev

Fluent Hibernate一对一映射问题

来自分类Dev

HIbernate一对一映射类对象