проблема nhibernate на столбце идентичности - PullRequest
0 голосов
/ 14 ноября 2009

ошибка:

could not insert: [NHibernateExperiment.Domain.Customer][SQL: INSERT INTO Customer (FirstName, LastName, Address) VALUES (?, ?, ?); select SCOPE_IDENTITY()]

Отображение:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2"  
                    namespace="NHibernateExperiment.Domain"
                    assembly="NHibernateExperiment">

  <class name="Customer" table="Customer">
    <id name="CustomerID"  type="int" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="FirstName" type="String" length="50"/>
    <property name="LastName" type="String" length="50"/>
    <property name="Address"   type="String" length="100"/>

  </class>
</hibernate-mapping>

Класс клиента

namespace NHibernateExperiment.Domain
{
    public class Customer
    {
        public virtual int CustomerID { get; set; }
        public virtual String FirstName { get; set; }
        public virtual String LastName { get; set; }
        public virtual String Address { get; set; }
    }
}

Фактическая экономия

Configuration cfg = new Configuration();
ISessionFactory factory = cfg.Configure(Server.MapPath("hibernate.cfg.xml")).BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();

Customer customer = new Customer();
customer.FirstName = "Firstname";
customer.LastName = "lastname";            
customer.Address = "Address";

// Tell NHibernate that this object should be saved
session.Save(customer);

// commit all of the changes to the DB and close the ISession
transaction.Commit();
session.Close();

1 Ответ

0 голосов
/ 14 ноября 2009

Ваш код выглядит правильно. Вы создали базу данных из файла сопоставления? Если это возможно, сделайте это с:

public void CreateDatabaseSchemaFromMappingFiles()
{
    NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
    cfg.Configure();
    SchemaMetadataUpdater.QuoteTableAndColumns(cfg);
    NHibernate.Tool.hbm2ddl.SchemaExport schema = new NHibernate.Tool.hbm2ddl.SchemaExport(cfg);
    schema.Create(false, true);
}

Вы можете упростить файл сопоставления, например так:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2"  
                    namespace="NHibernateExperiment.Domain"
                    assembly="NHibernateExperiment">

  <class name="Customer" table="Customer">
    <id name="CustomerID"  type="int">
      <generator class="native" />
    </id>
    <property name="FirstName" length="50"/>
    <property name="LastName" length="50"/>
    <property name="Address" length="100"/>
  </class>
</hibernate-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...