NHibernate是一个免费开源的面向对象关系映射(ORM)框架,它简化了与数据库的交互过程。它可以将对象映射到关系型数据库表,并提供透明的数据访问。NHibernate可以连接多种关系型数据库,其中包括Oracle。
使用NHibernate连接Oracle需要引用Oracle.DataAccess.Client库和System.Data.dll库。可以先创建一个名为NhibernateTest的控制台应用程序,并将以上两个库文件添加到项目引用中,然后通过NuGet安装NHibernate包。
接下来,需要在App.config文件中配置数据源,例如:
在NHibernateTest项目根目录下创建一个名为“Mappings”的文件夹,用于存放映射文件。可以创建两个XML映射文件,分别映射User类和Address类对应的数据库表:
以上映射将User对象映射到TB_USER表,Address对象映射到TB_ADDRESS表。User类的Address属性是一个引用类型,可以使用
在NHibernateTest根目录下创建一个叫做NhibernateHelper的类,用于创建和关闭一个ISessionFactory实例,这个实例是一个线程安全的缓存,同时也是线程唯一的:
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;
namespace NHibernateTest
{
internal class NhibernateHelper
{
private static ISessionFactory sessionFactory;
private NhibernateHelper() { }
public static ISession OpenSession()
{
if (sessionFactory == null)
{
var cfg = new Configuration();
cfg.DataBaseIntegration(x =>{
x.ConnectionStringName = "NHibernateTest";
x.Driver();
x.Dialect();
x.BatchSize = 100;
});
cfg.AddAssembly("NHibernateTest");
sessionFactory = cfg.BuildSessionFactory();
}
return sessionFactory.OpenSession();
}
public static void CloseSessionFactory()
{
if (sessionFactory != null)
{
sessionFactory.Close();
sessionFactory = null;
}
}
}
}
在NhibernateHelper中使用了OracleClientDriver和Oracle10gDialect,前者是Oracle.DataAccess.Client库中定义的一个驱动程序,用于与Oracle数据库进行数据交互,后者是一个NHibernate提供的方言,用于在日志、计算、比较等多个方面提供Oracle数据类型的支持。
现在可以在Console项目中使用Nhibernate连接Oracle数据库和执行SQL查询了。在Program.cs文件中使用以下代码:
using NHibernateTest.Model;
namespace NHibernateTest
{
internal class Program
{
private static void Main(string[] args)
{
using (var session = NhibernateHelper.OpenSession())
{
var user = session.Get<User>(1);
System.Console.WriteLine(user.UserName);
System.Console.WriteLine(user.Address.Province);
foreach (User u in session.CreateQuery("from User").List<User>())
{
System.Console.WriteLine(u.UserName);
System.Console.WriteLine(u.Address.Province);
}
}
NhibernateHelper.CloseSessionFactory();
}
}
}
以上代码通过session创建了一个User对象,并输出了它的UserName和Address属性。接下来在循环中执行了一个SQL查询,并输出了所有User对象的UserName和Address属性。Note:这里省略了使用NuGet安装和引用Oracle.DataAccess.Client库以及System.Data.dll库的步骤。NLTK