Я новичок в 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();
}
Что я делаю не хватает?
Diego, спасибо. Я ценю это. – user50622