簡體   English   中英

NHibernate子級未插入(非流利)

[英]NHibernate Child not inserting (not Fluent)

我正在嘗試為價格插入價格屬性。 價格插入,但價格屬性不插入。 Price屬性具有一個引用價格鍵的外鍵pat_prc_key。 在Nhibernate中,我已經了解了關於Stack Overflow的許多建議,以建立子/父母關系,但是我被困住了。 任何建議將不勝感激。 我在下面包含了所有代碼。

價格xml

    <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Api.Models.Price, Aafp.Also.Api" table="price" where="prc_delete_flag = 0">
    <id name="Key" column="prc_key" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000">
      <generator class="guid" />
    </id>
    <property name="AddUser" type="String" column="prc_add_user" />
    <property name="AddDate" type="DateTime" column="prc_add_date" />
    <property name="ChangeUser" type="String" column="prc_change_user" insert="false" />
    <property name="ChangeDate" type="DateTime" column="prc_change_date" insert="false" />
    <property name="DeleteFlag" type="Boolean" column="prc_delete_flag" />
    <property name="EntityKey" type="Guid" column="prc_entity_key" />
    <property name="ProductKey" type="Guid" column="prc_prd_key" />
    <property name="ProductTypeKey" type="Guid" column="prc_prd_ptp_key" />
    <property name="ProductCompanyKey" type="Guid" column="prc_prd_atc_key" />
    <property name="PriceCode" type="String" column="prc_code" />
    <property name="PriceAmount" type="Decimal" column="prc_price" />
    <property name="PricePercent" type="Decimal" column="prc_percent" />
    <property name="PriceDisplayName" type="String" column="prc_display_name" />
    <property name="PriceRevenueKey" type="Guid" column="prc_gla_revenue_key" />
    <property name="PriceStartDate" type="DateTime" column="prc_start_date" />
    <property name="PriceEndDate" type="DateTime" column="prc_end_date" />
    <property name="PriceEwebCode" type="String" column="prc_eweb_code" />
    <property name="RenewUnpaidOrdersFlag" type="Boolean" column="prc_renew_unpaid_orders_flag" />
    <property name="AllowUnpaidOrdersFlag" type="Boolean" column="prc_allow_unpaid_orders_flag" />

    <bag name="PriceAttributes" inverse="true" cascade="all-delete-orphan" lazy="true">
      <key column="pat_prc_key" />
      <one-to-many class="Api.Models.PriceAttribute, Api" />
    </bag>
  </class>
</hibernate-mapping>

價格屬性xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Api.Models.PriceAttribute, Api" table="price_attribute" mutable="false" where="pat_delete_flag = 0">
    <id name="Key" column="pat_key" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000">
      <generator class="guid" />
    </id>
    <property name="AddUser" type="String" column="pat_add_user" />
    <property name="AddDate" type="DateTime" column="pat_add_date" />
    <property name="ChangeUser" type="String" column="pat_change_user" />
    <property name="ChangeDate" type="DateTime" column="pat_change_date" />
    <property name="DeleteFlag" type="Boolean" column="pat_delete_flag" />
    <property name="EntityKey" type="Guid" column="pat_entity_key" />
    <property name="Code" type="String" column="pat_code" />

    <many-to-one name="Price" class="Api.Models.Price, Api" column="prc_key"  />
  </class>
</hibernate-mapping>

價格模型

namespace Api.Models
{
    public class Price
    {
        public virtual Guid Key { get; set; }

        public virtual string AddUser { get; set; }

        public virtual DateTime AddDate { get; set; }

        public virtual string ChangeUser { get; set; }

        public virtual DateTime ChangeDate { get; set; }

        public virtual bool DeleteFlag { get; set; }

        public virtual Guid EntityKey { get; set; }

        public virtual Guid ProductKey { get; set; }

        public virtual Guid ProductTypeKey { get; set; }

        public virtual Guid ProductCompanyKey { get; set; }

        public virtual string PriceCode { get; set; }

        public virtual decimal PriceAmount { get; set; }

        public virtual decimal PricePercent { get; set; }

        public virtual string PriceDisplayName { get; set; }

        public virtual Guid PriceRevenueKey { get; set; }

        public virtual DateTime PriceStartDate { get; set; }

        public virtual DateTime PriceEndDate { get; set; }

        public virtual string PriceEwebCode { get; set; }

        public virtual bool RenewUnpaidOrdersFlag { get; set; }

        public virtual bool AllowUnpaidOrdersFlag { get; set; }

        public virtual IList<PriceAttribute> PriceAttributes { get; set; }

    }
}  

價格屬性模型

namespace Api.Models
{
    public class PriceAttribute
    {
        public virtual Guid Key { get; set; }

        public virtual string AddUser { get; set; }

        public virtual DateTime AddDate { get; set; }

        public virtual string ChangeUser { get; set; }

        public virtual DateTime? ChangeDate { get; set; }

        public virtual bool DeleteFlag { get; set; }

        public virtual Guid EntityKey { get; set; }

        public virtual string Code { get; set; }

        public virtual Price Price { get; set; }
    }
}

任務代碼

 var price = new Price
                {
                    AddDate = DateTime.Now,
                    AddUser = webLogin,
                    PriceCode = activity.ActivityNumber,
                    PriceAmount = 0.00M,
                    PricePercent = 100.0000M,
                    PriceStartDate = DateTime.Now,
                    PriceEndDate = activity.ActivityEndDate.AddDays(1),
                    PriceEwebCode = activity.ActivityNumber,
                    RenewUnpaidOrdersFlag = true,
                    AllowUnpaidOrdersFlag = true,
                    PriceAttributes = new List<PriceAttribute>()
                };

                var priceAttribute = new PriceAttribute
                {
                    AddDate = DateTime.Now,
                    AddUser = webLogin,
                    Code = activity.ActivityNumber
                };

                price.PriceAttributes.Add(priceAttribute);
                priceAttribute.Price = price;

Command.Store(price);

        public new void Store(Price price)
        {
            base.Store(price);
            Session.Flush();
        }

關系父子關系由一列定義。 子表中的父引用。 因此,兩個映射(父級的<bag>和子級的<many-to-one> )都必須使用它。即具有相同的列名

// parent as is (wrong mapping)
<bag name="PriceAttributes" inverse="true" cascade="all-delete-orphan" lazy="true">
  <key column="pat_prc_key" /> // WRONG HERE

// child
<many-to-one name="Price" class="Api.Models.Price, Api" 
    column="prc_key"  /> // child reference to parent

換句話說,父項必須固定為

// parent as should be
  <key column="prc_key" /> // child reference to parent

建議如下:

經過大量的反復試驗並使用上面的解決方案,映射將無法正常工作。 希望這會在將來對某人有所幫助。 他們如何構造數據庫使得必須具有兩個單獨的插入語句。

我建議使用ISet而不是IList,並將集合映射為Set而不是Bag。

暫無
暫無

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

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