2010-01-17 4 views
0

Je suis nouveau à NHibernate et ai travaillé avec quelques tutoriels. J'ai créé un objet (Project) et l'ai passé à la méthode Session.Save (obj). Pour tester, j'avais des valeurs par défaut dans chaque champ de base de données et la méthode renvoyait la clé primaire mais les champs étaient vides. J'ai supprimé les valeurs par défaut de la base de données et j'obtiens une erreur SQL "impossible d'insérer NULL dans le premier champ".NHibernate ne popluate pas l'enregistrement de DB

Voici la classe du projet:

public class Project 
{ 
    private int _projectId; 
    public virtual int ProjectId 
    { 
     get { return _projectId; } 
     set { _projectId = value; } 
    } 
    private string _projectCode; 
    public virtual string ProjectCode 
    { 
     get { return _projectCode; } 
     set { _projectCode = value; } 
    } 
    private int _customerKey; 
    public virtual int CustomerKey 
    { 
     get { return _customerKey; } 
     set { _customerKey = value; } 
    } 
    private DateTime _insertDate; 
    public virtual DateTime InsertDate 
    { 
     get { return _insertDate; } 
     set { _insertDate = value; } 
    } 
} 

Voici le fichier de mappage: Project.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping 
    xmlns="urn:nhibernate-mapping-2.2" 
    assembly="MosaicCrm.Core" 
    namespace="MosaicCrm.Core"> 
    <class name="Project" > 
     <id name="ProjectId"> 
      <generator class="native"></generator> 
     </id> 
     <properties name="ProjectCode" ></properties> 
     <properties name="CustomerKey"></properties> 
     <properties name="InsertDate"></properties> 
    </class> 
</hibernate-mapping> 

Voici le fichier de configuration.

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="connection.provider"> 
      NHibernate.Connection.DriverConnectionProvider 
     </property> 
     <property name="dialect"> 
      NHibernate.Dialect.MsSql2005Dialect 
     </property> 
     <property name="connection.driver_class"> 
      NHibernate.Driver.SqlClientDriver 
     </property> 
     <property name="connection.connection_string"> 
      Data Source=localhost;Initial Catalog=MosaicCrm;Integrated Security=SSPI; 
     </property> 
     <property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> 
    </session-factory> 
</hibernate-configuration> 

Voici un extrait de l'application de la console

var config = new Configuration(); 
config.Configure(); 
//config.AddAssembly(typeof(Project).Assembly); 
config.AddAssembly("MosaicCrm.Core"); 

var factory = config.BuildSessionFactory(); 
//TODO: NHibernate access code here 

ISession session = null; 
ITransaction trans = null; 
try 
{ 
    session = factory.OpenSession(); 
    trans = session.BeginTransaction(); 
    var project = new Project(); 
    project.CustomerKey = 12; 
    project.ProjectCode = "ProjectCode"; 
    project.InsertDate = DateTime.Now; 
    session.Save(project); 
    trans.Commit(); 
    int i = project.ProjectId; 
} 
catch (Exception ex) 
{ 
    trans.Rollback(); 
} 
finally 
{ 
    session.Close(); 
} 

Qu'est-ce que je fais manque?

+0

Diego, merci. Je vous en suis reconnaissant. – user50622

Répondre

0

Votre mappe est incorrecte. L'élément utilisé pour mapper une propriété est property, et non properties.

Questions connexes