podrías mostrar como estas configurando nhibernate? que dialect estas usando?
2011/3/19 Ezequiel Calderara <[email protected]> > 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 -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
