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