NHibernate中定义实体类属性的方法

来源:互联网 发布:自动分析软件 编辑:程序博客网 时间:2024/06/03 16:53

方法一:值得注意的是这是一种简单的定义,省略了return及value赋值的语句

public virtual string ZitiLocation { get; set; }

方法二:

 private Boolean isCancelled = false;        public virtual Boolean IsCancelled {            get { return isCancelled; }            set { this.isCancelled = value; }        }

对于一对多关系的定义

        private IList<CmbOrderItem> items = new List<CmbOrderItem>();        public virtual IList<CmbOrderItem> Items        {            get { return items; }            set { this.items = value; }        }        public virtual void AddItem(CmbOrderItem item)        {            this.Items.Add(item);        }        public virtual void DeleteItem(CmbOrderItem item)        {            this.Items.Remove(item);        }        public virtual int GetTotalCount()        {            int qty = 0;            foreach (CmbOrderItem item in this.Items)            {                qty += item.Quantity;            }            return qty;        }        public virtual decimal GetTotalAmount()        {            decimal amt = 0;            foreach (CmbOrderItem item in this.Items)            {                amt += new Decimal(item.Quantity) * item.SalePrice;            }            return amt;        }        public virtual int IndexOf(long stockId)        {            foreach (CmbOrderItem item in this.Items)            {                if (item.Diamond != null && item.Diamond.Id == stockId)                {                    return this.Items.IndexOf(item);                }            }            return -1;        }        public CmbOrder(ShoppingCart cart, CmbUser user) {            this.ShoppingCartId = cart.Id.ToString();            this.User = user;            this.PaymentWay = cart.PaymentWay;            this.DeliveryWay = cart.DeliveryWay;            this.Address = cart.Address;            this.Province = cart.Province;            this.City = cart.City;            this.Zip = cart.Zip;            this.ZitiLocation = cart.ZitiLocation;            this.Mobile = cart.Mobile;            this.Email = cart.Email;            foreach (ShoppingCartItem item in cart.Items) {                CmbOrderItem line = new CmbOrderItem(item);                this.AddItem(line);            }        }


同时另外关联的表也需要定义:


    public CmbOrderItem() { }        public CmbOrderItem(ShoppingCartItem item) {            this.Diamond = item.Diamond;            this.Quantity = item.Quantity;            this.SalePrice = item.Diamond.SalePrice;        }        private DateTime createDate = DateTime.Now;        public virtual DateTime CreateDate        {            get { return createDate; }            set { this.createDate = value; }        }        private DateTime lastUpdateDate = DateTime.Now;        public virtual DateTime LastUpdateDate        {            get { return lastUpdateDate; }            set { this.lastUpdateDate = value; }        }        public virtual int Quantity { get; set; }        public virtual CmbPlainDiamond Diamond { get; set; }        public virtual decimal SalePrice { get; set; }        private string displayName = "";        public virtual string DisplayName {             get {                string value = this.Diamond.Weight.Value.ToString("F3") + "克拉" + this.Diamond.Shape.Value + "钻石<br/><br />"                        + this.Diamond.Color.Value + "色  " + this.Diamond.Clarity.Value + "净度  " + this.Diamond.Cut.Value + "切工<br/><br />";                if (this.Diamond.DiamondCertifications != null && this.Diamond.DiamondCertifications.Count > 0) {                    value += "证书: ";                    foreach (CmbDiamondCertification cert in this.Diamond.DiamondCertifications) {                         value += cert.Number + ";";                    }                }                return value;            }                         set             {                this.displayName = value;            }        }

在hbm文件中定义映射

<list name="Items" table="CmbOrderItem"  cascade="all">  <key column="OrderId"/>  <list-index column="Idx"/>        <composite-element class="CmbOrderItem">            <property name="CreateDate" />            <property name="LastUpdateDate" />            <property name="Quantity" />            <many-to-one name="Diamond"/>            <property name="SalePrice"/>        </composite-element></list>


主键Id的定义

类中定义:

        public virtual long Id { get; set; }
hbm文件定义,class换成“assigned”数据表将不会自增,还可以定义guid

<id name="Id"><generator class="native" /></id>


如何指定关联表中的外键

类中定义:

public virtual IList<CmbPayment> Payments { get; set; }

hbm文件中定义

   <bag name="Payments" cascade="all"  inverse="true" order-by="PaymentConfirmDate ASC">      <key column="CmbOrder" />      <one-to-many class="NDiamond.Library.Core.Cmb.DomainModel.Payment.CmbPayment" />    </bag>


关联类中也需要定义多对一关系

public virtual CmbOrder CmbOrder { get; set; }

hbm文件定义

<many-to-one name="CmbOrder" />


对于多对多关系的定义

1.首先定义一个一对多关系

public virtual IList<Catalog> Catalogs { get; set; }

2.hbm文件中定义

    <list name="Catalogs" table="PackageDefinition_Catalog" cascade="all">      <key column="PackageDefinitionId"/>      <list-index column="Idx" />      <many-to-many class="NDiamond.Library.Core.DomainModel.VirtualProduct.Catalog, NDiamond.Library.Core" column="CatalogId"></many-to-many>    </list>

3.正常的定义catalog类(附经典的重载例子)

    public class Catalog    {        public virtual long Id { get; set; }        public virtual OptimizedVariedStyle Style { get; set; }        public virtual Material Material { get; set; }        public virtual bool equals(Object a)        {            if ((a as Catalog ) != null)            {                if (this.Material.Id == ((Catalog)a).Material.Id &&                this.Style.Id == ((Catalog)a).Style.Id)                {                    return true;                }            }            return false;        }    }

4.catalog.hbm文件定义

<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NDiamond.Library.Core" namespace="NDiamond.Library.Core.DomainModel.VirtualProduct">  <class name="Catalog" table="Catalog" dynamic-insert="true" dynamic-update="true">    <id name="Id">      <generator class="native" />    </id>    <many-to-one name="Style" unique-key="UNIQUE_STYLE_MATERIAL" />    <many-to-one name="Material" unique-key="UNIQUE_STYLE_MATERIAL" />      </class></hibernate-mapping>



如何对字段定义unique 

<property name="OrderNumber" unique="true" />

如何对字段定义别名

 <many-to-one name="User" column="UserId"/>


如何对字段定义非空

<property name="OrderId"  not-null="true"/>

如何对表中数据指定类型

<property name="ConfirmUrl" not-null="true" ><column name="ConfirmUrl"  sql-type="nvarchar(2048)"/></property>

级联的方式有

 cascade="save-update" lazy="false"

cascade="all