ArgumentOutOfRangeException with entity

0

I have a method that expects a file object, what it does is add references in the database:

See the method:

  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 = versao.ARQUIVO_VERSAO_GUID,
                    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();
        }
    }

However, giving the problem: System.ArgumentOutOfRangeException: The index was out of range. It should be non-negative and smaller than the size of the collection.

    
asked by anonymous 06.02.2015 / 15:08

2 answers

0

If arquivo.ArquivoVersoes is null, you need to use a code that prevents this:

internal void AddArquivo(Model.Arquivo arquivo)
{
    using (var ctx = new TestEntities())
    {
        var versao = arquivo.ArquivoVersoes.FirstOrDefault();

        if (versao != null) 
        {
            ctx.ARQUIVO.Add(new ARQUIVO()
            {
                ARQUIVO_GUID = arquivo.ARQUIVO_GUID,
                ARQUIVO_VERSAO = new ARQUIVO_VERSAO()
                {
                    ARQUIVO_GUID = arquivo.ARQUIVO_GUID,
                    ARQUIVO_VERSAO_GUID = versao.ARQUIVO_VERSAO_GUID,
                    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();
        }
    }
}
    
06.02.2015 / 15:35
0

I think the error happens here

var versao = arquivo.ArquivoVersoes[0];

Check if there is any record inside FileVersions

So

    var versao = new ArquivoVersoes();
    if(arquivo.ArquivoVersoes != null && arquivo.ArquivoVersoes.Count() > 0)
       versao = arquivo.ArquivoVersoes[0];
    
06.02.2015 / 15:13