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

方法一:值得注意的是这是一种简单的定义,省略了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












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值