首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate入门

NHibernate入门
EN

Stack Overflow用户
提问于 2009-06-19 21:34:20
回答 1查看 1.5K关注 0票数 1

我正在尝试用NHibernate开发我的Hello World程序。

我的代码如下:

代码语言:javascript
复制
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]

但是这个程序产生了一个异常:

异常消息:{“无法插入: NHibernate__MyClass.MyClass"}

内部异常消息:{“无法将值NULL插入表‘NHibernate.dbo.MyClass’的'ID‘列;列不允许为NULL。插入失败。\r\n该语句已终止。”}

会有什么问题呢?

NHibernate DLL版本= 2.0.0.2002

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-19 21:36:49

由于您的映射文件中有此标记

代码语言:javascript
复制
<generator class="native" />

在SQL中,您需要将该表中的ID字段设置为身份。

您也可以让nHibernate生成身份字段。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1020128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档