NHibernate初学者指南(7):映射模型到数据库之方式三
XML映射#
在VS中为NHibernate映射文件添加智能感知能力,需要添加.xsd文件。在项目中创建一个解决方案文件夹,名为Schema,添加两个XML schema定义文件:nhibernate-configuration.xsd和nhibernate-mapping.xsd到这个文件夹,如下图:
当为实体定义映射时,我们添加一个新的XML文件到项目中。这个文件的扩展名必须是.hbm.xml。作为文件名,建议使用映射的实体名,例如,当映射Product实体时文件名为Product.hbm.xml。如下图所示:
还要设置XML文件的BuildAction属性为Embedded Resource,如下图所示:
关于XML怎么配置的我就不写了,因为园子里有很多关于NHibernate配置的教程,这里只做一个例子。
实战时间—使用XML映射简单的模型#
在这个例子中,我们创建一个非常简单的领域模型,并且使用XML映射它。然后让NHibernate基于这些映射文件生成SQL脚本。
1. 在VS中创建一个Console Application,名字为:XmlMappingSample。
2. 添加对NHibernate.dll的引用。
3. 在解决方案中新建一个解决方案文件夹Schema,并添加nhibernate-configuration.xsd和nhibernate-mapping.xsd两个文件。
4. 在项目中创建Domain文件夹,添加Customer, Order和LineItem类到该文件夹:
Customer类
namespace XmlMappingSample.Domain { public class Customer { public virtual int Id { get; set; } public virtual string CustomerName { get; set; } } }
LineItem类
namespace XmlMappingSample.Domain { public class LineItem { public virtual int Id { get; set; } public virtual int Quantity { get; set; } public virtual decimal UnitPrice { get; set; } public virtual string ProductCode { get; set; } } }
Order类
namespace XmlMappingSample.Domain { public class Order { public virtual int Id { get; set; } public virtual DateTime OrderDate { get; set; } public virtual Customer Customer { get; set; } public virtual IList<LineItem> LineItems { get; set; } } }
5. 在Domain文件夹中新建一个XML文件,名为:Customer.hbm.xml,不要忘了该文件的BuildAction属性设置为Embedded Resource。其代码如下:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="XmlMappingSample" namespace="XmlMappingSample.Domain"> <class name="Customer"> <id name="Id"> <generator class="hilo"/> </id> <property name="CustomerName"/> </class> </hibernate-mapping>
6. 同样的方式,创建LineItem.hbm.xml和Order.hbm.xml文件,代码分别如下:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="XmlMappingSample" namespace="XmlMappingSample.Domain"> <class name="LineItem"> <id name="Id"> <generator class="hilo"/> </id> <property name="Quantity"/> <property name="UnitPrice"/> <property name="ProductCode"/> </class> </hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="XmlMappingSample" namespace="XmlMappingSample.Domain"> <class name="Order"> <id name="Id"> <generator class="hilo"/> </id> <property name="OrderDate"/> <many-to-one name="Customer" column="CustomerId"/> <bag name="LineItems" inverse="true"> <key column="OrderId"/> <one-to-many class="LineItem"/> </bag> </class> </hibernate-mapping>
7. 在Program类中添加如下using语句。
using NHibernate.Cfg; using NHibernate.Cfg.Loquacious; using NHibernate.Dialect; using NHibernate.Driver; using NHibernate.Tool.hbm2ddl; using XmlMappingSample.Domain;
8. 在Program类的Main方法中,创建NHibernate配置对象,如下面的代码所示:
var configuration = new Configuration(); configuration.DataBaseIntegration(db => { db.Dialect<MsSql2008Dialect>(); db.Driver<SqlClientDriver>(); });
9. 将所有的XML映射文件添加到配置:
configuration.AddAssembly(typeof(Customer).Assembly);
10. 添加下面的代码,创建并在控制台上显示SQL脚本:
var exporter = new SchemaExport(configuration); exporter.Execute(true, false, false);
11. 添加下面的代码避免程序不经确认就退出:
Console.Write("按回车退出:"); Console.ReadLine();
12. 运行程序,控制台输出如下:
至此,三种映射模型的方式就讲完了,下一篇Sessions和Transactions。
作者:程序旅途
出处:https://www.cnblogs.com/nianming/archive/2011/11/15/2249917.html
版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!