[英]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.