Argued tofrangeexception with Entity

Asked

Viewed 761 times

0

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

Look at 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 ta giving the problem: System.Argued tofrangeexception: The index was out of range. It should be non-negative and smaller than the collection size.

2 answers

0

I think the mistake happens here

var versao = arquivo.ArquivoVersoes[0];

Check if there is any record within Arquivoversoes

Thus

    var versao = new ArquivoVersoes();
    if(arquivo.ArquivoVersoes != null && arquivo.ArquivoVersoes.Count() > 0)
       versao = arquivo.ArquivoVersoes[0];
Show 2 more comments

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();
        }
    }
}
  • has disappeared to Exception, but nothing in the bank. other methods are working with the bank already.

  • If ArquivoVersoes is null, naturally it will save nothing.

  • 1

    Yeah, I just tested the version and it was, thanks

  • as Séto o Arquivoversoes no c#?

  • @Warlock From what I understand, ArquivoVersoes needs to be filled in somehow. Your code does not make this clear.

  • I have access to it, at the same time I will pass the file to the method, before calling this method, I file file, file.XNAME ="File", file.GUID="1", file Files come within File tbm, so it is a list, how do I add something? the Add method does not appear.

  • @Warlock I do not know. This should be put in another question.

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.