Code First Oracle

12/07/2012

0

Bom dia,

Estou com o seguinte problema:

Estou realizando um projeto que preciso realizar um CRUD utilizando Entity Framework(4.3.1) + Oracle + Mapiamento por Code First.

O fato é que não estou conseguindo realizar update de um registro que se encontra gravado no BD.

Já tentei de algumas formas mas foi inútil.

O mapiamento está sendo feito da seguinte maneira:

 public class FilmeConfigurador : EntityTypeConfiguration<Filme>
    {
        public FilmeConfigurador()
            : base()
        {

            this.ToTable(CJAVA.TB_DD_FILME);

            this.HasKey<int>(a => a.Id);
            this.Property(a => a.Id)
             .HasColumnName(ID)
             .IsRequired();

            this.Property(a => a.Titulo)
               .HasColumnName(TITULO)
               .HasMaxLength(50)
               .IsRequired();

            this.Property(a => a.Produtora)
               .HasColumnName(PRODUTORA)
               .HasMaxLength(50);

            this.Property(a => a.DataLancamento)
               .HasColumnName(DATA_LANCAMENTO)
               .IsRequired();

            this.Property(a => a.Resumo)
               .HasColumnName(RESUMO)
               .HasMaxLength(255);

        }
     }


O Id é incrementado automaticamente utilizando uma sequence que criei no banco e um trigger que adiciona o proximo valor da sequence(.nextval) no Id antes de salvar o registro de vez.


O método salvar inicialmente se encontrava da seguinte maneira:

 public bool Salvar(Filme objFilme)
        {

            using (var ctx = new LocadoraContext())
            {

                ctx.Entry<Filme>(objFilme).State =
                objFilme.Id > 0 ? EntityState.Modified : EntityState.Added;

                return ((ctx.SaveChanges())>0);
            }
        }


Desta maneira o registro é salvo na tabela do banco. Mas não realiza o Update( nem o Delete se em um teste for alterado o EntityState para Deleted).

Fiz algumas alterações neste método para realizar o Update, segue abaixo algumas destas alterações:

1:
        public bool Salvar(Filme objFilme)
        {

            using (var ctx = new LocadoraContext())
            {
                Filme filmeCtx = ctx.FilmeContext.First(f => f.Id == objFilme.Id);

                filmeCtx.Titulo = objFilme.Titulo;
                filmeCtx.Produtora = objFilme.Produtora;
                filmeCtx.DataLancamento = objFilme.DataLancamento;
                filmeCtx.Resumo = objFilme.Resumo;

                return ((ctx.SaveChanges())>0);
           }
        }


2:
        public bool Salvar(Filme objFilme)
         {

           using (var ctx = new LocadoraContext())
            {
                ObjectContext objectContext = ((IObjectContextAdapter)ctx).ObjectContext;
           
                objectContext.ApplyCurrentValues<Filme>(LocadoraContext.FilmeContext, objFilme);
               
                return ((objectContext.SaveChanges())>0);
             }
         }


3:
           public bool Salvar(Filme objFilme)
           {

              using (var ctx = new LocadoraContext())
               {

                  Filme original = ctx.FilmeContext.First(f => f.Id == objFilme.Id);

                  var entryPlan = ctx.Entry(original);

                  entryPlan.CurrentValues.SetValues(objFilme);

                  entryPlan.State = EntityState.Modified;
                
                  
                  return ((ctx.SaveChanges())>0);
              }
          }


Dentre outros (vários para falar a verdade) que não comentei para poder colocar neste tópico.


Se alguém, por gentileza, puder analisar o caso e apresentar uma possível solução eu agradeço muito.



Desde já agradeço sua atenção.

OBS: Não irei postar todos os erros (stacktrace de todos os códigos acima) somente do numero 2:

StackTrace:
   at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.<ProduceDynamicCommands>d__0.MoveNext()
   at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
   at System.Data.Mapping.Update.Internal.UpdateCommandOrderer..ctor(IEnumerable`1 commands, UpdateTranslator translator)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.ProduceCommands()
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
   at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   at System.Data.Objects.ObjectContext.SaveChanges()
   at LocadoraData.FilmeData.Salvar(Filme objFilme) in C:\workspaceDotNet\estudos\Locadora\LocadoraData\FilmeData.cs:line 104
   at LocadoraBusiness.FilmeBusiness.Salvar(Filme objFilme) in C:\workspaceDotNet\estudos\Locadora\LocadoraBusiness\FilmeBusiness.cs:line 28
   at LocadoraServices.LocadoraService.LocadoraServices.ILocadoraService.SalvarFilme(Filme objFilme) in C:\workspaceDotNet\estudos\Locadora\LocadoraServices\LocadoraService.svc.cs:line 37
   at SyncInvokeSalvarFilme(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
.
Douglas Dionizio

Douglas Dionizio

Responder

Posts

12/07/2012

Douglas Dionizio

Ninguém pode me ajudar???
Responder

13/07/2012

Douglas Dionizio

Pessoal ainda preciso de ajuda... :)
Responder

13/07/2012

Douglas Dionizio

?... :)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar