Hola,
Al final he creado esto:
public class SqlSeqGenerator : TransactionHelper,
IIdentifierGenerator, IConfigurable
{
// codigo
}
Y ejecuto directamente el update parametrizado en el mapeo dentro de
DoWorkInCurrentTransaction para que genere el id fuera de la
transaccion:
UPDATE C_Identificador SET comptador = comptador + 1, @p_id =
comptador +1
WHERE taula = @nom_taula
El mapeo me queda así:
<id name="ID" column="TRAMESA_ID" type="System.Decimal" unsaved-
value="0">
<generator class="Framework.Data.IdGenerator.SqlSeqGenerator,
Framework.Data">
<param name="mastertable">C_Identificador</param>
<param name="columnid">comptador</param>
<param name="columntable">taula</param>
<param name="table">NT_TRAMESA</param>
</generator>
</id>
La razón de hacerlo así es que mi desarrollo tiene que utilizar una
base de datos existente y usada por otro programa que no se puede
modificar...
Dentro de esto, no es tan malo no? Piensa que mi desarrollo es un
autónomo no utilizado por usuarios. Es la integración de varios
sistemas...
On 20 mayo, 16:55, José F. Romaniello <[email protected]> wrote:
> Ah, pregunta... Ojo que si vas a usar el algoritmo del HiLo, no vayas a
> estar usando por otro lado el sp que me mostrate en el primer mail. Por que
> vas a tener choques.
>
> El 20 de mayo de 2010 11:53, José F. Romaniello
> <[email protected]>escribió:
>
>
>
>
>
> > Estas un poco sonado, la mejor forma de hacerlo sería utilizar esa tabla
> > como tabla de HiLo, y utilizar bigint = int64 = long.
> > Tal vez con un bajo Hi, pero ahí como que me pierdo en la teoría.
>
> > Creo que para hacer eso, vas a tener que heredar TableHiLoGenerator y pisar
> > algunos métodos.
>
> > Te recomiendo mirar este, que hizo algo parecido, pero en vez de tener row
> > por entity, tenia column por cada entity.. pero a los fines es parecido lo
> > que deberías hacer:
> >http://stackoverflow.com/questions/1345754/nhibernate-hilo-new-column...
>
> > El 20 de mayo de 2010 11:39, Juan Cuello <[email protected]>escribió:
>
> > El tipo es INT:
>
> >> CREATE TABLE [dbo].[C_Identificador] (
> >> [taula] [varchar] (40) COLLATE
> >> SQL_Latin1_General_CP1_CI_AS NOT NULL ,
> >> [comptador] [int] NOT NULL
> >> ) ON [PRIMARY]
>
> >> Mejor no tener demasiados huecos, aunque el id es interno.
>
> >> On 20 mayo, 16:33, José F. Romaniello <[email protected]> wrote:
> >> > Que tipo de dato es int o bigint?
> >> > Podes tener huecos grandes en la numeración?,
> >> > es decir..... que para una tabla saltes del 1000 al 3000 por decir?
>
> >> > El 20 de mayo de 2010 11:31, Juan Cuello <[email protected]>
> >> escribió:
>
> >> > > Como harías la misma funcionalidad con esa tabla tal cual?
>
> >> > > Me tengo que ceñir a esa tabla...
>
> >> > > On 20 mayo, 15:51, José F. Romaniello <[email protected]> wrote:
> >> > > > hereda la clase TableGenerator, y llama al storeprocedure desde ahí,
> >> > > usando
> >> > > > ado.net puro.
> >> > >http://nhforge.org/wikis/howtonh/creating-a-custom-id-generator-for-n.
> >> ..
>
> >> > > > Cuidado por que ese store procedure es feo, y ES un cuello de
> >> botella.
> >> > > > Es un cuello de botella por que cada vez que se llama se tiene que
> >> > > bloquear
> >> > > > ese registro en el peor de los casos de bloqueara la página o tabla
> >> según
> >> > > el
> >> > > > motor, hasta que termine la transacción. Altamente no recomendable.
>
> >> > > > El 20 de mayo de 2010 09:00, Juan Cuello <[email protected]>
> >> > > escribió:
>
> >> > > > > Hola,
>
> >> > > > > Resulta que en un proyecto que tengo que hacer la clave primaria
> >> se
> >> > > > > genera llamando al siguiente procedimiento almacenado de SQL
> >> Server:
>
> >> > > > > CREATE PROCEDURE dbo.nouID (@nom_taula varchar(50), @p_id int
> >> OUTPUT)
> >> > > > > AS
>
> >> > > > > UPDATE C_Identificador
> >> > > > > SET comptador = comptador + 1,
> >> > > > > �...@p_id = comptador +1
> >> > > > > WHERE taula = @nom_taula
>
> >> > > > > Return 1
> >> > > > > GO
>
> >> > > > > Alguien podría decirme que tengo que poner en el mapeo?
>
> >> > > > > <id name="ID" column="ID" type="System.Decimal"
> >> unsaved-value="0">
> >> > > > > <generator class="..."/>
> >> > > > > .....
> >> > > > > </id>
>
> >> > > > > Muchas gracias
>
> >> > > > > --
> >> > > > > 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
>
> >> > --
> >> > 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
--
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano