Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Chamar TSessionObjectSet usando tipo genérico, é possível?
#1
Acho que minha pergunta é mais relacionada ao Delphi (ainda estou aprendendo), mas como também tem relação sobre como usar o ORMBr, acho que deve ser o local correto


Estou querendo criar uma função que faz a persistência de um objeto usando o OrmBr, mas como nesta função eu uso generics, está dando erro na hora de chamar TSessionObjectSet<M>


Código:
function TBancoDeDados.SalvarObjeto<M>(Objeto: M): Boolean;
Var Connection : IDBConnection;
    Sessao :   TSessionObjectSet<TPessoa>;
    idObjeto : Integer;

begin

    Try
    idObjeto := GetIDFromGenericObject<M>(Objeto);
    connection := bancodedados.getConnection;

    if Not  conexao.Connected then Conectar('Firebird');
     Sessao := TSessionObjectSet<M>.create(connection,1); /////// E2511 Type parameter 'M' must be a class type

     if (idObjeto > 0) then
      Sessao.Update(objeto,idObjeto.toString) else Sessao.insert(self);

    Result := True;
  Except
   on E:Exception do raise Exception.Create(E.Message);

  End;

end;

O erro está acontecendo porque A Classe TSessionObjectSet tem uma constraint, que restringe o parâmetro M somente a classes:

>>>>>>> TSessionObjectSet<M: class, constructor> = class(TSessionAbstract<M>)

Alguém sabe como contornar isto e conseguir chamar TSessionObjectSet usando o Generics?
Responder
#2
(20-12-2017, 10:58 AM)willian Escreveu: Acho que minha pergunta é mais relacionada ao Delphi (ainda estou aprendendo), mas como também tem relação sobre como usar o ORMBr, acho que deve ser o local correto


Estou querendo criar uma função que faz a persistência de um objeto usando o OrmBr, mas como nesta função eu uso generics, está dando erro na hora de chamar TSessionObjectSet<M>


Código:
function TBancoDeDados.SalvarObjeto<M>(Objeto: M): Boolean;
Var Connection : IDBConnection;
    Sessao :   TSessionObjectSet<TPessoa>;
    idObjeto : Integer;

begin

    Try
    idObjeto := GetIDFromGenericObject<M>(Objeto);
    connection := bancodedados.getConnection;

    if Not  conexao.Connected then Conectar('Firebird');
     Sessao := TSessionObjectSet<M>.create(connection,1); /////// E2511 Type parameter 'M' must be a class type

     if (idObjeto > 0) then
      Sessao.Update(objeto,idObjeto.toString) else Sessao.insert(self);

    Result := True;
  Except
   on E:Exception do raise Exception.Create(E.Message);

  End;

end;

O erro está acontecendo porque A Classe TSessionObjectSet tem uma constraint, que restringe o parâmetro M somente a classes:

>>>>>>> TSessionObjectSet<M: class, constructor> = class(TSessionAbstract<M>)

Alguém sabe como contornar isto e conseguir chamar TSessionObjectSet usando o Generics?

Willian, estou com o mesmo problema, você conseguiu resolver?
Responder
#3
(20-12-2017, 10:58 AM)willian Escreveu: Acho que minha pergunta é mais relacionada ao Delphi (ainda estou aprendendo), mas como também tem relação sobre como usar o ORMBr, acho que deve ser o local correto


Estou querendo criar uma função que faz a persistência de um objeto usando o OrmBr, mas como nesta função eu uso generics, está dando erro na hora de chamar TSessionObjectSet<M>


Código:
function TBancoDeDados.SalvarObjeto<M>(Objeto: M): Boolean;
Var Connection : IDBConnection;
    Sessao :   TSessionObjectSet<TPessoa>;
    idObjeto : Integer;

begin

    Try
    idObjeto := GetIDFromGenericObject<M>(Objeto);
    connection := bancodedados.getConnection;

    if Not  conexao.Connected then Conectar('Firebird');
     Sessao := TSessionObjectSet<M>.create(connection,1); /////// E2511 Type parameter 'M' must be a class type

     if (idObjeto > 0) then
      Sessao.Update(objeto,idObjeto.toString) else Sessao.insert(self);

    Result := True;
  Except
   on E:Exception do raise Exception.Create(E.Message);

  End;

end;

O erro está acontecendo porque A Classe TSessionObjectSet tem uma constraint, que restringe o parâmetro M somente a classes:

>>>>>>> TSessionObjectSet<M: class, constructor> = class(TSessionAbstract<M>)

Alguém sabe como contornar isto e conseguir chamar TSessionObjectSet usando o Generics?

 Sessao := TSessionObjectSet<M>.create(connection,1); /////// E2511 Type parameter 'M' must be a class type

É nesse caso é uma questão relacionada ao Generics relacionada ao Delphi mesmo e não do ORMBr.

  Isaque Pinheiro
  Fundador do Projeto ORM Brasil
  ORMBr SAC - Assine e faça parte dessa história ajudando o projeto a crescer.

Responder


Possíveis Tópicos Relacionados...
Tópico: Autor Respostas: Visualizações: Última Mensagem
  Como Povoar classes de tabelas usando joins Deivison Davi Albring 2 2,164 15-03-2019, 03:21 PM
Última Mensagem: Deivison Davi Albring
  Como definir a propriedade do tipo enum (Enumeration) no ORMBr? willian 1 3,303 17-01-2018, 04:52 PM
Última Mensagem: juliomar

Saltar Fórum:


usuários a ver este tópico: 1 Visitante(s)