2010-01-17 4 views
0

Я новичок в NHibernate и работаю с некоторыми учебниками. Я создал объект (Project) и передал его методу Session.Save (obj). Для тестирования у меня были значения по умолчанию в каждом поле БД, и метод возвращал первичный ключ, но поля были пустыми. Я удалил значения по умолчанию из БД и получил SQL-ошибку «не может вставить NULL в первое поле».NHibernate не заполняет запись DB

Вот класс проекта:

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; } 
    } 
} 

Вот файл отображения: 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> 

Вот конфигурационный файл.

<?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> 

Вот отрывок из консольного приложения

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(); 
} 

Что я делаю не хватает?

+0

Diego, спасибо. Я ценю это. – user50622

ответ

0

Неправильное отображение. Элементом, используемым для отображения свойства, является property, а не properties.

Смежные вопросы