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>
类中定义:
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
- NHibernate中定义实体类属性的方法
- NHibernate中处理同名实体的解决办法
- NHibernate映射关系表(实体映射文件字段的属性对应的NHibernate类型)
- 定义类的属性方法
- 如何将自己的实体类封装到一个list中,定义自己一系列的方法
- PHP中属性和方法的定义
- NHibernate中数据操作封装类定义
- javaWeb中小问题,实体的DAO方法中定义实体对象问题
- NHibernate中实体类、Mapping配置文件与数据库表之间的关系
- HTML 元素定义,属性定义,实体定义
- EF实体类的枚举属性映射设计方法
- c# 类成员的定义 定义方法、字段和属性
- c# 类成员的定义 定义方法、字段和属性
- 指定JSON.toJSONString中实体类属性的输出顺序
- 第七篇:Android 将实体类中方法定义到接口中
- C#类中属性的定义
- 在js对象中定义属性和方法的实例。
- C++中定义派生类之前需要看到基类的定义实体
- Android学习日记Activities
- cirrus developer key
- 使用变量的一般事项
- Windows 下Rsync服务的安装配置使用
- 写sql语句创建视图的一个例子
- NHibernate中定义实体类属性的方法
- ubuntu11.04 u盘启动安装
- make: * No rule to make target '/native.c', needed by '/android/workspace/NDKTest/obj/l
- C/C++ 函数模板
- floyd 算法
- 把txt文件中的三列读到矩阵中去
- 求无向图的连通分量 算法
- js+div+css
- How to enable the IntelliSense of SQL Server 2008