开始使用NHibernate
我正试图在NHibernate开发我的Hello World程序 我的代码如下:开始使用NHibernate,nhibernate,Nhibernate,我正试图在NHibernate开发我的Hello World程序 我的代码如下: MyClass.cs ---------- using System.Collections.Generic; using System.Text; using System; using NHibernate.Collection; using NHibernate.Mapping; using Iesi.Collections; namespace NHibernate__MyClass { publ
MyClass.cs
----------
using System.Collections.Generic;
using System.Text;
using System;
using NHibernate.Collection;
using NHibernate.Mapping;
using Iesi.Collections;
namespace NHibernate__MyClass
{
public class MyClass
{
int id;
string name;
int _value;
public MyClass()
{
id = 0;
name = "";
_value = 0;
}
public virtual int Id
{
get { return id; }
set { id= value; }
}
public virtual string Name
{
get { return name; }
set { name= value; }
}
public virtual int Value
{
get { return _value; }
set { _value= value; }
}
}
}
MyClass.hbm.xml
---------------
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernate__MyClass" assembly="NHibernate__MyClass">
<class name="MyClass" table="MyClass">
<id name="Id">
<column name="ID" sql-type="int" not-null="true"/>
<generator class="native" />
</id>
<property name="Name">
<column name="Name" not-null="true" />
</property>
<property name="Value">
<column name="Value" not-null="true" />
</property>
</class>
</hibernate-mapping>
Program.cs
----------
using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
namespace NHibernate__MyClass
{
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Id = 1;
myClass.Name = "Hello World!";
myClass.Value = 100;
ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
session.BeginTransaction();
session.Save(myClass);
session.Transaction.Commit();
Console.ReadLine();
}
}
}
App.config
----------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
/>
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.connection_string">Data Source=.\SQLEXPRESS;Initial Catalog=NHibernate;Integrated Security=True</property>
<mapping assembly="NHibernate__MyClass" />
</session-factory>
</hibernate-configuration>
</configuration>
SQL Table
---------
CREATE TABLE [dbo].[MyClass](
[ID] [int] NOT NULL,
[Name] [varchar](50) NOT NULL,
[value] [int] NOT NULL
) ON [PRIMARY]
MyClass.cs
----------
使用System.Collections.Generic;
使用系统文本;
使用制度;
使用NHibernate.Collection;
使用NHibernate.Mapping;
使用Iesi.Collections;
名称空间NHibernate\uuuu MyClass
{
公共类MyClass
{
int-id;
字符串名;
int_值;
公共MyClass()
{
id=0;
name=“”;
_数值=0;
}
公共虚拟整数Id
{
获取{return id;}
设置{id=value;}
}
公共虚拟字符串名
{
获取{返回名称;}
设置{name=value;}
}
公共虚拟整数值
{
获取{返回_值;}
设置{u value=value;}
}
}
}
MyClass.hbm.xml
---------------
Program.cs
----------
使用制度;
使用System.Collections.Generic;
使用系统文本;
使用NHibernate;
使用NHibernate.Cfg;
名称空间NHibernate\uuuu MyClass
{
班级计划
{
静态void Main(字符串[]参数)
{
MyClass MyClass=新的MyClass();
myClass.Id=1;
myClass.Name=“你好,世界!”;
myClass.Value=100;
ISessionFactory sessionFactory=新配置().Configure().BuildSessionFactory();
ISession session=sessionFactory.OpenSession();
session.BeginTransaction();
session.Save(myClass);
Commit();
Console.ReadLine();
}
}
}
App.config
----------
NHibernate.dialogue.mssql2000方言
NHibernate.Connection.DriverConnectionProvider
数据源=。\SQLEXPRESS;初始目录=NHibernate;集成安全性=真
SQL表
---------
创建表[dbo].[MyClass](
[ID][int]不为空,
[Name][varchar](50)不为空,
[value][int]不为空
)在[小学]
但该程序正在生成一个异常:
异常消息:{“无法插入:[NHibernate_umyclass.MyClass][SQL:插入MyClass(名称、值)值(?,);选择作用域_IDENTITY()]”
内部异常消息:{“无法将值NULL插入列'ID',表'NHibernate.dbo.MyClass';列不允许为NULL。插入失败。\r\n语句已终止。“”
有什么问题吗
NHibernate DLL version=2.0.0.2002,因为映射文件中有此标记
<generator class="native" />
在SQL中,需要将该表中的ID字段设置为标识
您也可以让nHibernate生成标识字段