Method to edit data with Entity

0

I am developing a file manager and have already implemented some methods like addArquivo , listarArquivo , listarVersoes , etc.

But I need to edit it, see my DAL methods:

Add:

 internal void AddArquivo(Model.Arquivo arquivo)
    {
        using (var ctx = new TESTEntities())
        {
            var versao = arquivo.ArquivoVersoes[0];
            ctx.ARQUIVO.Add(new ARQUIVO()
            {
                ARQUIVO_GUID = arquivo.ARQUIVO_GUID,
                ARQUIVO_VERSAO = new ARQUIVO_VERSAO()
                {
                    ARQUIVO_GUID = arquivo.ARQUIVO_GUID,
                    ARQUIVO_VERSAO_GUID = Util.Util.GUIDs.GetGUID(),
                    ARQUIVO = versao.ARQUIVO,
                    DATAHORA = versao.DATAHORA,
                    TAMANHO = versao.TAMANHO,
                    USUARIO_PESSOA_GUID = versao.USUARIO_PESSOA_GUID
                },
                DIRETORIO_GUID = arquivo.DIRETORIO_GUID,
                EXTENSAO = arquivo.EXTENSAO,
                IS_STREAM = arquivo.IS_STREAM,
                TAG = arquivo.TAG,
                TIPO_DE_ARQUIVO_GUID = arquivo.TipoDeArquivo.TIPO_DE_ARQUIVO_GUID,
                ULT_ARQUIVO_VERSAO_GUID = arquivo.ULT_ARQUIVO_VERSAO_GUID,
                URL = arquivo.URL,
                XARQUIVO = arquivo.XARQUIVO
            });
            ctx.SaveChanges();
        }

Get a file:

/// <summary>
    /// Método que busca um arquivo conforme parametro
    /// </summary>
    /// <param name="termo"></param>
    /// <returns></returns>
    internal Arquivo GetArquivo(string termo)
    {
        using (var ctx = new TESTEntities())
        {
            var arquivo = (from arq in ctx.ARQUIVO
                           where arq.ARQUIVO_GUID == termo
                           || arq.XARQUIVO == termo
                           select new Arquivo()
                           {
                               ARQUIVO_GUID = arq.ARQUIVO_GUID,
                               DIRETORIO_GUID = arq.DIRETORIO_GUID,
                               EXTENSAO = arq.EXTENSAO,
                               IS_STREAM = arq.IS_STREAM,
                               TAG = arq.TAG,
                               TIPO_DE_ARQUIVO_GUID = arq.TIPO_DE_ARQUIVO_GUID,
                               ULT_ARQUIVO_VERSAO_GUID = arq.ULT_ARQUIVO_VERSAO_GUID,
                               URL = arq.URL,
                               XARQUIVO = arq.XARQUIVO,
                           }).FirstOrDefault();
            arquivo.ArquivoVersoes.Add(GetArquivoVersao(arquivo.ULT_ARQUIVO_VERSAO_GUID));
            return arquivo;
        }
    }

Mapping:

    public DbSet<ARQUIVO> ARQUIVO { get; set; }
    public DbSet<ARQUIVO_PRODUTO> ARQUIVO_PRODUTO { get; set; }
    public DbSet<ARQUIVO_VERSAO> ARQUIVO_VERSAO { get; set; }
    public DbSet<DIRETORIO> DIRETORIO { get; set; }
    public DbSet<DIRETORIO_PASTA> DIRETORIO_PASTA { get; set; }
    public DbSet<TIPO_DE_ARQUIVO> TIPO_DE_ARQUIVO { get; set; }

What I did with the help of Thiago Custodio's answer:

internal void UpdateArquivo(String termo, Arquivo arquivoEditado)
    {

        var arquivo = GetArquivo(termo);
        using (var ctx = new TESTEntities())
        {



            arquivo.XARQUIVO = arquivoEditado.XARQUIVO;
            arquivo.TAG = arquivoEditado.TAG;
            arquivo.EXTENSAO = arquivoEditado.EXTENSAO;
            arquivo.URL = arquivoEditado.URL;
            arquivo.IS_STREAM = arquivoEditado.IS_STREAM;

            ctx.Entry(arquivo).State = System.Data.EntityState.Modified;
            ctx.SaveChanges();

    }
    }

But giving this exception:

the entity type arquivo not part of the model for the current context
    
asked by anonymous 09.02.2015 / 15:39

2 answers

0

I was able to use it as follows:

internal void UpdateArquivo(Model.Arquivo arquivoEditado)
    {
        using (var ctx = new TESTEntities())
        {
            var file = ctx.ARQUIVO.FirstOrDefault(a => a.ARQUIVO_GUID == arquivoEditado.ARQUIVO_GUID);
            if (file == null)
                throw new ArquivoException("Arquivo não encontrado");

            file.XARQUIVO = arquivoEditado.XARQUIVO;
            file.TAG = arquivoEditado.TAG;
            file.EXTENSAO = arquivoEditado.EXTENSAO;
            file.URL = arquivoEditado.URL;
            file.IS_STREAM = arquivoEditado.IS_STREAM;

            ctx.Entry(file).State = System.Data.EntityState.Modified;
            ctx.SaveChanges();

        }

Just use the:

 var file = ctx.ARQUIVO.FirstOrDefault(a => a.ARQUIVO_GUID == arquivoEditado.ARQUIVO_GUID);  

That way he would get exactly the file I wanted to edit, but thanks to everyone.

    
09.02.2015 / 21:46
0

something like this:

var termo = "";
var arquivo = GetArquivo(termo);

arquivo.TAG  = "outra tag";

using (var ctx = new TESTEntities())
{
    ctx.Entry(arquivo).State = System.Data.Entity.EntityState.Modified;
    ctx.SaveChanges();
}
    
09.02.2015 / 16:17