Buenas a todos, soy nuevo en el grupo y nuevo con nHibernate.
Estuve buscando codigo de ejemplo e informacion sobre los generators
para ver que es lo que estoy haciendo mal.

Tengo la clase Brand, que se mapea con la Tabla Brand, la cual tiene
el campo id un int con identity(1,1) (MS SQL Server).
Segun leí debo utilizar un generator con la clase "identity" o
"native". Probé con ambos con los mismos resultados.

El caso mas simple es, tengo esta clase Brand:
=========================================
public class Brand
    {

        private int _id;
        private string _name;

        public Brand()
        {

        }

        public virtual int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public virtual string Name
        {
            get { return _name; }
            set { _name = value; }
        }

    }//end Brand
=========================================

Que estoy mapeando contra esta tabla:
=========================================
CREATE TABLE [dbo].[Brand](
        [id] [int] IDENTITY(1,1) NOT NULL,
        [Name] [varchar](50) COLLATE Traditional_Spanish_CI_AS NOT NULL,
 CONSTRAINT [PK_Brand] PRIMARY KEY CLUSTERED
(
        [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY
= OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
=========================================

Y Este es el archivo de mapping:
=========================================
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MRGest.Domain" namespace="MRGest.Domain">

  <class name="Brand" table="Brand">
    <id name="Id" column="Id" type="int" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="Name" />
  </class>
</hibernate-mapping>
=========================================
Y al momento de hacer el insert, me arroja esta excepcion:
=========================================
NHibernate.Exceptions.GenericADOException: could not insert:
[MRGest.Domain.Brand#0][SQL: INSERT INTO Brand (Name, Id) VALUES
(?, ?)] ---> System.Data.SqlClient.SqlException: Cannot insert
explicit value for identity column in table 'Brand' when
IDENTITY_INSERT is set to OFF.
   en System.Data.SqlClient.SqlConnection.OnError(SqlException
exception, Boolean breakConnection)
   en System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection)
   en
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj)
   en System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,
SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj)
   en
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,
RunBehavior runBehavior, String resetOptionsString)
   en
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
async)
   en
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
method, DbAsyncResult result)
   en
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
result, String methodName, Boolean sendToPipe)
   en System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   en NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand
cmd) en d:\CSharp\NH\nhibernate\src\NHibernate\AdoNet
\AbstractBatcher.cs:línea 216
   en NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation
expectation) en d:\CSharp\NH\nhibernate\src\NHibernate\AdoNet
\NonBatchingBatcher.cs:línea 39
   en
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id,
Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql,
Object obj, ISessionImplementor session) en d:\CSharp\NH\nhibernate\src
\NHibernate\Persister\Entity\AbstractEntityPersister.cs:línea 2643
   --- Fin del seguimiento de la pila de la excepción interna ---
   en
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id,
Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql,
Object obj, ISessionImplementor session) en d:\CSharp\NH\nhibernate\src
\NHibernate\Persister\Entity\AbstractEntityPersister.cs:línea 2663
   en
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id,
Object[] fields, Object obj, ISessionImplementor session) en d:\CSharp
\NH\nhibernate\src\NHibernate\Persister\Entity
\AbstractEntityPersister.cs:línea 3015
   en NHibernate.Action.EntityInsertAction.Execute() en d:\CSharp\NH
\nhibernate\src\NHibernate\Action\EntityInsertAction.cs:línea 59
   en NHibernate.Engine.ActionQueue.Execute(IExecutable executable) en
d:\CSharp\NH\nhibernate\src\NHibernate\Engine\ActionQueue.cs:línea 136
   en NHibernate.Engine.ActionQueue.ExecuteActions(IList list) en d:
\CSharp\NH\nhibernate\src\NHibernate\Engine\ActionQueue.cs:línea 126
   en NHibernate.Engine.ActionQueue.ExecuteActions() en d:\CSharp\NH
\nhibernate\src\NHibernate\Engine\ActionQueue.cs:línea 169
   en
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource
session) en d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default
\AbstractFlushingEventListener.cs:línea 249
   en
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent
event) en d:\CSharp\NH\nhibernate\src\NHibernate\Event\Default
\DefaultFlushEventListener.cs:línea 19
   en NHibernate.Impl.SessionImpl.Flush() en d:\CSharp\NH\nhibernate
\src\NHibernate\Impl\SessionImpl.cs:línea 1479
   en NHibernate.Transaction.AdoTransaction.Commit() en d:\CSharp\NH
\nhibernate\src\NHibernate\Transaction\AdoTransaction.cs:línea 187
   en MRGest.Data.Repositories.BaseRepository`2.Add(TEntity entity) en
D:\Proyectos\Ironicnet\ironicnet.com\MRGest\trunk\src\MRGest\Data
\Repositories\BaseRepository.cs:línea 18
   en
Web.Controllers.Modules.Stock.ProductBrand.ProductBrandCRUD.Create(String
name, String description) en D:\Proyectos\Ironicnet\ironicnet.com
\MRGest\trunk\src\MRGest\Web\Controllers\Modules\Stock\ProductBrand
\CRUD.aspx.cs:línea 19
=========================================

Muchas gracias, saludos.

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a