2009-06-19 8 views
1

J'essaie de développer mon programme Hello World dans NHibernate.Premiers pas avec NHibernate

Mes codes sont les suivants:

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] 

Mais ce programme génère une exception:

Message d'exception: { "n'a pas pu insérer: [NHibernate__MyClass.MyClass] [SQL: INSERT INTO MyClass (Name, Value) VALUES (?,?); Select SCOPE_IDENTITY()] "}

Message d'exception interne: {" Impossible d'insérer la valeur NULL dans la colonne 'ID', la table 'NHibernate.dbo.MyClass'; n'autorise pas les valeurs NULL. INSERT échoue. \ r \ nLa déclaration a été arrêtée. "}

Quel peut être le problème?

Version NHibernate DLL = 2.0.0.2002

Répondre

3

En raison de cette balise dans votre fichier de mappage

<generator class="native" /> 

Dans SQL, vous devez définir le champ ID dans ce tableau à une identité.

Vous pouvez également avoir des champs d'identité nHibernate.

+0

Merveilleuse suggestion !!!!!! –

Questions connexes