Me parece muy raro lo que decis, pone un ejemplo bien chico en algun lado y yo lo miro
2011/3/19, Ezequiel Calderara <[email protected]>: > Asi quedo el 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"> > <generator class="identity"/> > </id> > <property name="Name" /> > </class> > </hibernate-mapping> > > Este es el codigo del repository: > public void Add(TEntity entity) > { > using (ISession session = NHibernateHelper.OpenSession()) > using (ITransaction transaction = > session.BeginTransaction()) > { > session.Save(entity); > transaction.Commit(); > } > } > Y De esta manera llamo al metodo Add: > MRGest.Domain.Brand brand = new MRGest.Domain.Brand(); > brand.Name = name; > MRGest.Data.Repositories.BrandRepository repository = > new MRGest.Data.Repositories.BrandRepository(); > repository.Add(brand); > > Esto es lo que muestra el profiler: > exec sp_executesql N'INSERT INTO Brand (Name, Id) VALUES (@p0, > @p1)',N'@p0 nvarchar(4000),@p1 int',@p0=N'Test',@p1=0 > > De todas maneras, sigue arrojando el mismo error. > > Gracias!! > On Mar 19, 3:23 pm, José F. Romaniello <[email protected]> wrote: >> Aparentemente tenes todo bien :( >> 1-proba sacarle unsaved-value="0" >> 2-mostranos como haces para insertar un nuevo brand >> >> saludos, >> >> 2011/3/19 Ezequiel Calderara <[email protected]> >> >> > Si, este esl hibernate.cfg.xml >> >> > <?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=MRGest;Integrated >> > Security=True;Application Name=HibernateConnection</property> >> > <property >> >> > name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, >> > NHibernate.ByteCode.Castle</property> >> > <property name="show_sql">true</property> >> > </session-factory> >> > </hibernate-configuration> >> >> > On 19 mar, 13:03, José F. Romaniello <[email protected]> wrote: >> > > 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 > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano -- Enviado desde mi dispositivo móvil -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
