none
Ayuda con linq to entities RRS feed

  • Pregunta

  • Hola estoy realizando una pagina web, el problema es que al guardar el un objeto nuevo de linq to entities lo hace pero al querer guardar otro se me borra la cache de la pagina y no se como hacerlo, lo que quiero es guardar en cache todos los datos antes de guardar

    Le dejo el código para ver si me pueden ayudar

    Esta es la pagina

                                                                 

    <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Sesion.master" CodeBehind="PruebasdePaginas.aspx.vb" Inherits="PremierWeb.PruebasdePaginas" %>

    <asp:Content ID="Content3" ContentPlaceHolderID="main" runat="server">
         <link href="Estilos/bootstrap.css" rel="Stylesheet" type="text/css" />    
      <link href="Estilos/bootstrap-theme.css" rel="Stylesheet" type="text/css" />
        <link href="DatePicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css" />
        <script  src="Jquery/jquery-2.1.4.js"></script>
        <script type="text/javascript"  src="Jquery/bootstrap.js"></script>

        <%--<script type="text/javascript" src ="Jquery/bootstrap-datepicker.js"></script>--%>
        <script type="text/javascript" src="DatePicker/js/moment.js"></script>
        <script type="text/javascript" src="DatePicker/js/es.js"></script>
        <script type="text/javascript" src="DatePicker/js/bootstrap-datetimepicker.js"></script>


        <%--  --%>
        <%--  --%>
        <%-- Pruebas --%>
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <div class="container">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <div class="row">
                        <div class="col-sm-1"></div>
                        <div class="col-sm-10">
                            <div class="form-horizontal">
                                <div class="form-group">
                                    <label class="col-sm-2 control-label" for="DDLConceptoAnexo">
                                        Concepto
                                    </label>
                                    <div class="col-sm-6">
                                    <asp:DropDownList ID="DDLConceptoAnexo" CssClass="form-control" runat="server" DataSourceID="LinqDataSource1" DataTextField="descripcion" DataValueField="id"></asp:DropDownList>
                                        </div>
                                    <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="PremierWeb.PremierEntities" EntityTypeName="" Select="new (id, descripcion)" TableName="conceptos_anexos_recaudo">
                                    </asp:LinqDataSource>
                                </div>
                                <div class="form-group">
                                    <label  class="col-sm-2 control-label" for ="TXTCantidadAnexos">
                                        Cantidad de abordos
                                    </label>
                                    <div class="col-sm-4">
                                    <asp:TextBox ID="TXTCantidadAnexos" CssClass="form-control" runat="server"></asp:TextBox>
                                        </div>
                                </div>


                                <div class="form-group">
                                    <label  class="col-sm-2 control-label" for="TXTObservacionesAnexos">
                                        Observaciones
                                    </label>
                                    <div class="col-sm-10">
                                    <asp:TextBox ID="TXTObservacionesAnexos" Rows="3" MaxLength="250" CssClass="form-control" runat="server" TextMode="MultiLine"></asp:TextBox>
                                        </div>
                                </div>
                                <asp:Button ID="BTTAgregar" CssClass="btn bg-primary active" runat="server" Text="Button" />
                            </div>
                        </div>
                        <div class="col-sm-1"></div>
                    </div>
                    <div class="row " align="center">
                        <div style="width: 80%;" align="center" class="grid">
                            <div class="rounded">
                                <div class="top-outer">
                                    <div class="top-inner">
                                        <div class="top">

                                            <h2>
                                                Anexos de guía
                                            </h2>

                                        </div>
                                    </div>
                                </div>
                                <br />                            
                                <asp:GridView ID="GVAnexos" runat="server" AutoGenerateColumns="False" Style="width: 80%"
                                    CssClass="datatable" AllowPaging="True" AllowSorting="True"
                                    CellPadding="0" BorderWidth="0px" GridLines="None"
                                    SortedAscendingHeaderStyle-CssClass="sortasc" SortedDescendingHeaderStyle-CssClass="sortdesc"
                                    SortedAscendingCellStyle-CssClass="sortasc"
                                    SortedDescendingCellStyle-CssClass="sortdesc"
                                    OnPageIndexChanging="OnPageIndexChangingAnexos" PageSize="20">
                                    <PagerStyle CssClass="paginacion-fila" />
                                    <RowStyle CssClass="fila" />
                                    <EditRowStyle BackColor="#CCFFFF" />
                                    <PagerSettings
                                        Mode="NumericFirstLast" PageButtonCount="20"
                                        FirstPageText="«" LastPageText="»" />
                                    <Columns>

                                        <asp:BoundField DataField="id" HeaderText="ID" />

                                        <asp:TemplateField HeaderText="Tipo de anexo">


                                            <ItemTemplate>
                                                <asp:Label ID="Label1" Text='<%# Bind("conceptos_anexos_recaudo.descripcion") %>' runat="server"></asp:Label>

                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:BoundField DataField="cantidad" HeaderText="Cantidad de abordos" />

                                        <asp:BoundField DataField="observaciones" HeaderText="Observaciones" />

                                    </Columns>

                                    <SortedAscendingCellStyle CssClass="sortasc"></SortedAscendingCellStyle>

                                    <SortedAscendingHeaderStyle CssClass="sortasc"></SortedAscendingHeaderStyle>

                                    <SortedDescendingCellStyle CssClass="sortdesc"></SortedDescendingCellStyle>

                                    <SortedDescendingHeaderStyle CssClass="sortdesc"></SortedDescendingHeaderStyle>

                                </asp:GridView>

                            </div>

                        </div>
                    </div>
                </ContentTemplate>
            </asp:UpdatePanel>

        </div>
    </asp:Content>

    Y este el codigo 

    Public Class PruebasdePaginas
        Inherits System.Web.UI.Page
        Dim db As New PremierEntities
        Dim guia As New recaudo
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then

            End If
        End Sub
        Protected Sub OnPageIndexChangingAnexos(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
            GVAnexos.PageIndex = e.NewPageIndex
        End Sub

        Private Sub BTTAgregar_Click(sender As Object, e As EventArgs) Handles BTTAgregar.Click
            Dim anexo As New anexos_recaudo
            With anexo
                .id_concepto = DDLConceptoAnexo.SelectedValue
                .id_recaudo = guia.id
                .cantidad = CInt(TXTCantidadAnexos.Text)
                .observaciones = TXTObservacionesAnexos.Text
                .fecha_mod = Now
                .usuario_mod = "admin"
            End With
            db.anexos_recaudo.Add(anexo)
            GVAnexos.DataSource = db.anexos_recaudo.Local.ToList
            GVAnexos.DataBind()
        End Sub
    End Class

    Espero y me puedan ayudar 

    miércoles, 10 de febrero de 2016 15:55

Respuestas

  • Ya resolví una parte, lo que hice fue guardarlo en una variable de session y la mando llamar de nuevo cuando se refresca la pagina, solo que ahora tengo el problema que no me hace al bindig como se debe a las tabla hijo, te dejo la solución parcial aquí abajo a ver que opinas

    Public Class PruebasdePaginas
        Inherits System.Web.UI.Page
        Dim db As New PremierEntities
        Dim guia As New recaudo
        Dim anexos As New List(Of anexos_recaudo)
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then
                anexos = New List(Of anexos_recaudo)

                Session.Add("1", anexos)
            Else
                anexos = Session("1")
            End If
        End Sub
        Protected Sub OnPageIndexChangingAnexos(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
            GVAnexos.PageIndex = e.NewPageIndex
        End Sub

        Private Sub BTTAgregar_Click(sender As Object, e As EventArgs) Handles BTTAgregar.Click

            Dim anexo As New anexos_recaudo

            With anexo
                .id_concepto = DDLConceptoAnexo.SelectedValue
                .id_recaudo = guia.id

                .cantidad = CInt(TXTCantidadAnexos.Text)
                .observaciones = TXTObservacionesAnexos.Text
                .fecha_mod = Now
                .usuario_mod = "admin"
            End With
            anexos.Add(anexo)



            GVAnexos.DataSource = anexos
            GVAnexos.DataBind()
        End Sub

    Ya hasta el final quiero guardar todos los cambios

    De todos modos si se algo mas aquí lo dejo

    Gracias por la ayuda

    • Marcado como respuesta Edgar_Chihuahua miércoles, 10 de febrero de 2016 22:21
    miércoles, 10 de febrero de 2016 18:48
  • >>lo que hice fue guardarlo en una variable de session

    Private Sub BTTAgregar_Click(sender As Object, e As EventArgs) Handles BTTAgregar.Click
    
    	Dim anexo As New anexos_recaudo = DirectCast(Session("anexos"), anexos_recaudo)
    
    	With anexo
    		.id_concepto = DDLConceptoAnexo.SelectedValue
    		.id_recaudo = guia.id
    
    		.cantidad = CInt(TXTCantidadAnexos.Text)
    		.observaciones = TXTObservacionesAnexos.Text
    		.fecha_mod = Now
    		.usuario_mod = "admin"
    	End With
    	anexos.Add(anexo)
    
    	Session("anexos") = anexos
    
    	GVAnexos.DataSource = anexos
    	GVAnexos.DataBind()
    End Sub 

    no necesitas la lista que defines en la pagina con solo la session alcanza

    >>Ya hasta el final quiero guardar todos los cambios

    es aqui donde deberias recuperar la lista de la Session y volcarla al contexto de linq entities usando el

    db.anexos_recaudo.Add(anexo)

    para luego realizar el Save() del contexto y se inserte en la tabla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Edgar_Chihuahua miércoles, 10 de febrero de 2016 22:21
    miércoles, 10 de febrero de 2016 19:03

Todas las respuestas

  • hola

    en el codigo que muestras no veo que implementes ningun sistema de cache

    simplemente insertas y recargas el gridview

    o te refieres a que el <asp:LinqDataSource no recarga los datos ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 10 de febrero de 2016 16:31
  • Si a eso me refiero, no se como implementar un sistema de cache, en cuanto se descarga la pagina, pierdo los datos y al volver a llamar el botón ya no esta el objeto anterior
    miércoles, 10 de febrero de 2016 16:39
  • Puedes validar que el dato esta en la db ?

    la base de datos estas integrada al VS ? porque si es asi cada vez que inicias la aplicacion desde el VS este crea una copia de la db en la carpeta \bin\Debug

    de esta forma pierdes los datos entre ejecucion, quizas sea este tu caso

    [Visual Studio] Base de Datos integradas al proyecto

    en el articulo explico con una db sdf (Sql Compact) pero tambien aplica al mdf si es que usas un attach dinamico de la db al servicio de sql server

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 10 de febrero de 2016 16:58
  • No de echo es una conexión a una base en MySQL y uso Linq to entities, el problema es que como lo estoy haciendo web pierdo los cambio en la base de datos si no guardo antes 
    miércoles, 10 de febrero de 2016 17:19
  • >>el problema es que como lo estoy haciendo web pierdo los cambio en la base de datos si no guardo antes

    no creo que el hecho de ser web se pierdan

    la pregunta seria, puedes validar que se inserta el registro en la tabla ?

    no te estara faltando el SaveChanges() o el metodo equivalente en linq to entities

    Private Sub BTTAgregar_Click(sender As Object, e As EventArgs) Handles BTTAgregar.Click
            Dim anexo As New anexos_recaudo
            With anexo
                .id_concepto = DDLConceptoAnexo.SelectedValue
                .id_recaudo = guia.id
                .cantidad = CInt(TXTCantidadAnexos.Text)
                .observaciones = TXTObservacionesAnexos.Text
                .fecha_mod = Now
                .usuario_mod = "admin"
            End With
            db.anexos_recaudo.Add(anexo)
    
            db.SaveChange()
    
            GVAnexos.DataSource = db.anexos_recaudo.Local.ToList
            GVAnexos.DataBind()
        End Sub

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 10 de febrero de 2016 18:29
  • Ya resolví una parte, lo que hice fue guardarlo en una variable de session y la mando llamar de nuevo cuando se refresca la pagina, solo que ahora tengo el problema que no me hace al bindig como se debe a las tabla hijo, te dejo la solución parcial aquí abajo a ver que opinas

    Public Class PruebasdePaginas
        Inherits System.Web.UI.Page
        Dim db As New PremierEntities
        Dim guia As New recaudo
        Dim anexos As New List(Of anexos_recaudo)
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me.IsPostBack Then
                anexos = New List(Of anexos_recaudo)

                Session.Add("1", anexos)
            Else
                anexos = Session("1")
            End If
        End Sub
        Protected Sub OnPageIndexChangingAnexos(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
            GVAnexos.PageIndex = e.NewPageIndex
        End Sub

        Private Sub BTTAgregar_Click(sender As Object, e As EventArgs) Handles BTTAgregar.Click

            Dim anexo As New anexos_recaudo

            With anexo
                .id_concepto = DDLConceptoAnexo.SelectedValue
                .id_recaudo = guia.id

                .cantidad = CInt(TXTCantidadAnexos.Text)
                .observaciones = TXTObservacionesAnexos.Text
                .fecha_mod = Now
                .usuario_mod = "admin"
            End With
            anexos.Add(anexo)



            GVAnexos.DataSource = anexos
            GVAnexos.DataBind()
        End Sub

    Ya hasta el final quiero guardar todos los cambios

    De todos modos si se algo mas aquí lo dejo

    Gracias por la ayuda

    • Marcado como respuesta Edgar_Chihuahua miércoles, 10 de febrero de 2016 22:21
    miércoles, 10 de febrero de 2016 18:48
  • >>lo que hice fue guardarlo en una variable de session

    Private Sub BTTAgregar_Click(sender As Object, e As EventArgs) Handles BTTAgregar.Click
    
    	Dim anexo As New anexos_recaudo = DirectCast(Session("anexos"), anexos_recaudo)
    
    	With anexo
    		.id_concepto = DDLConceptoAnexo.SelectedValue
    		.id_recaudo = guia.id
    
    		.cantidad = CInt(TXTCantidadAnexos.Text)
    		.observaciones = TXTObservacionesAnexos.Text
    		.fecha_mod = Now
    		.usuario_mod = "admin"
    	End With
    	anexos.Add(anexo)
    
    	Session("anexos") = anexos
    
    	GVAnexos.DataSource = anexos
    	GVAnexos.DataBind()
    End Sub 

    no necesitas la lista que defines en la pagina con solo la session alcanza

    >>Ya hasta el final quiero guardar todos los cambios

    es aqui donde deberias recuperar la lista de la Session y volcarla al contexto de linq entities usando el

    db.anexos_recaudo.Add(anexo)

    para luego realizar el Save() del contexto y se inserte en la tabla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Edgar_Chihuahua miércoles, 10 de febrero de 2016 22:21
    miércoles, 10 de febrero de 2016 19:03
  • Hola ya lo verifique y no me funciono jejeje, es casi lo mismo que lo que hice, pero me sigue dando el mismo problema que al hacer referencia a otra tabla no me la acepta, de cualquier manera ya lo voy a hacer a un lado para poder proseguir en caso de luego encontrar la respuesta aquí la dejo
    miércoles, 10 de febrero de 2016 22:20
  • Gracias Leandro por la atención 
    miércoles, 10 de febrero de 2016 22:21