0) ,
5 CategorySchema UNIQUEIDENTIFIER null, primary key (ID))
存储过程
在映射文件中提供了database-object元素用来创建和删除数据库对象。
语法格式
1
2 创建存储过程或视图语句等数据库对象
3 删除存储过程或视图语句等数据库对象
4
那么现在我们创建一个查询ProductSchema表的存储过程
复制代码
CREATE PROCEDURE QueryProdcutSchema
AS
SELECT ID,Name FROM ProductSchema
QueryProdcutSchema
复制代码
节点与class节点同一级别。
生成的存储过程如下图
视图
在之前的篇章中,我们创建了VW_CusomterOrder这样的视图。那我们现在通过映射文件创建视图,修改CustomerOrderView.hbm.xml映射文件。
复制代码
1
2
3 CREATE VIEW [dbo].[VW_CusomterOrder]
4 AS
5 SELECT c.CustomerID,c.CustomerName
6 FROM dbo.TB_Customer c INNER JOIN
7 dbo.TB_Order o ON c.CustomerID = o.CustomerID INNER JOIN
8 dbo.TB_OrderProduct op ON o.OrderID = op.OrderID INNER JOIN
9 dbo.TB_Product p ON op.ProductID =p.ProductID
10
11 drop view dbo.VW_CusomterOrder
12
复制代码
测试,会有如下异常
生成的sql
复制代码
1 create table VW_CusomterOrder
2 (CustomerID uniqueidentifier not null unique, CustomerName NVARCHAR(16) null, CustomerAddress NVARCHAR(128) null, OrderID UNIQUEIDENTIFIER not null, OrderDate DATETIME null, primary key (CustomerID))
3
4 CREATE VIEW [dbo].[VW_CusomterOrder]
5 AS
6 SELECT c.CustomerID,c.CustomerName
7 FROM dbo.TB_Customer c INNER JOIN
8 dbo.TB_Order o ON c.CustomerID = o.CustomerID INNER JOIN
9 dbo.TB_OrderProduct op ON o.OrderID = op.OrderID INNER JOIN
10 dbo.TB_Product p ON op.ProductID =p.ProductID
复制代码
观察NHibernate生成SQL语句发现NHibernate利用Class映射自动生成了VW_CusomterOrder表,因为NHibernate见到Class映射就认为是表,它不知道这里映射的是视图,视图和表在映射文件中没有什么区别。我们修改一下这个映射文件,在database-object元素上面再添加一个database-object用于删除NHibernate生成的表。
drop table VW_CusomterOrder
drop table VW_CusomterOrder
这个database-object的意思就是在创建数据库架构时删除NHibernate自动生成的表VW_CusomterOrder,在删除数据库架构时删除表VW_CusomterOrder。