none
Estrutura de dados mutável RRS feed

  • Pergunta

  • Caros colegas,

    Estou desenvolvendo um aplicativo comercial que precisa ter um grande poder de personalização, semelhante ao do Microsoft Dynamics CRM e outros no mercado. Ou seja, do usuário deve poder ter autonomia para criar/modificar entidades e campos em tempo de execução.

    Por exemplo: O software foi distribuído com as entidades padrões "A", "B" e "C", e as funcionalidades básicas de CRUD para cada uma delas. O usuário, porém, tem uma necessidade específica de uma nova entidade, ou adicionar novos campos à entidades já existentes.

    Eu já tenho muita coisa modelada em base de dados para armazenar os metadados de minha base de negócio, como uma tabela de cadastro para as entidades do sistema, campos, relacionamentos, formulários, etc.

    Eu queria, justamente, transformar o que tenho em banco de dados em objetos que possam ser manipulados pelo Entity Framework, por exemplo.

    Vou transcrever um exemplo (bastante reduzido) de minha estrutura de dados para vocês entenderem melhor:

    CREATE TABLE [Entidades] ( [EntidadeId] uniqueidentifier not null, /* Chave primária */ [Nome] nvarchar(30) not null ) CREATE TABLE [Campos] ( [CampoId] uniqueidentifier not null, /* Chave primária */ [EntidadeId] uniqueidentifier not null, /* Chave estrangeira para referenciar a tabela Entidaes */ [Nome] nvarchar(30) not null, [Tipo] smallint not null ) /* Amostra de dados */ TABELA: Entidades =========================== EntidadeId | Nome =========================== '44C497EF...' | 'Usuario' 'A60A8504...' | 'Cliente' '252D3018...' | 'Grupo' '895E77CD...' | 'Empresa' =========================== TABELA: Campos ========================================================== CampoId | EntidadeId | Nome | Tipo ========================================================== '8F29F05B...' | '44C497EF...' | 'UsuarioId' | 0 'FD25C56C...' | '44C497EF...' | 'NomeUsuario' | 1 '93B34AB2...' | '44C497EF...' | 'Senha' | 1 '76938E43...' | 'A60A8504...' | 'ClienteId' | 0 '26FD3A12...' | 'A60A8504...' | 'NomeCliente' | 1 '830EAAC2...' | 'A60A8504...' | 'TelefoneContato' | 1 ==========================================================

    Eu não faço ideia de qual tecnologia utilizar. Já pesquisei sobre CodeDom e EF Code First, mas estou me embaralhando todo.

    Alguém tem alguma experiência nisso?

    Desde já agradeço.


    • Editado Eric Cordeiro quinta-feira, 19 de setembro de 2013 15:42
    quinta-feira, 19 de setembro de 2013 15:36

Todas as Respostas

  • Eric Cordeiro, qual versão do EF você está usando?

    Na empresa que eu trabalho, temos um sistema onde podemos adicionar e remover colunas e temos que tomar os cuidados com o CRUD também. Especialmente porque usamos muito o BULK INSERT. 

    Acho que no seu caso seria mais simples você tratar os dados dinamicamente por comandos sql do que usar algo engessado do tipo EF. Esse seria o caminho mais simples uma vez que temos views no sql que guardam as colunas e a posição das mesmas na instância do sql.

    Pode-se tentar usar o PropertyBuilder do Reflection.Emit mas não sabemos se irá funcionar adequadamente. http://msdn.microsoft.com/en-us/library/system.reflection.emit.propertybuilder.aspx

    quinta-feira, 19 de setembro de 2013 17:47
  • Oi, Cristian.

    Estou utilizando o EF 5 + .NET Framework 4.5.

    De fato, o mais simples seria utilizar comandos SQL. Porém, eu pensava se não poderia usufruir das vantagens do EF para acesso a dados.

    Darei uma olhada no Reflection.Emit para ver se atende as necessidades.

    terça-feira, 24 de setembro de 2013 18:07