es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Resultado de DbDataReader a modelo de base de datos en ASP.NET MVC 4, proveniente de un procedimiento almacenado usando ADO.NET.

Tengo un procedimiento almacenado definido por el usuario que devuelve varias tablas reales como conjunto de resultados:

CREATE PROCEDURE uspDemo
    (@UserID BIGINT = 0,
     @IsAdmin BIT = 0,
     @Title VARCHAR(120) = '')
AS
BEGIN 
    ------Recuperar publicaciones------
    SELECT * 
    FROM tblPost AS MP 
    INNER JOIN tblUserProfile AS UP ON UP.ID = MP.UserID
    WHERE UP.ID = @UserID 
      AND ((@IsAdmin = 0 AND MP.IsDeleted = 0 AND MP.IsApproved = 1)
           OR (@IsAdmin = 1 OR MP.IsDeleted = 0 OR MP.IsApproved = 1))

    ----- Recuperar etiquetas------
    SELECT *  
    FROM tblTagMasters AS MT 
    INNER JOIN tblPostTags AS MP ON MT.TagID = MP.TagID

    --------Recuperar las preferencias del usuario-----
    SELECT * 
    FROM tblUserLikes AS UV 
    INNER JOIN tblPost AS MP ON MP.PostId = UV.PostId
END

¿Cómo se traduce en ASP.NET MVC? Por favor, ayúdame.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para traducir este procedimiento almacenado definido por el usuario en ASP.NET MVC, debes seguir estos pasos:

    1. Crea una clase de modelo para cada tabla que sea devuelta por el procedimiento almacenado. Por ejemplo, en este caso, debes crear clases para tblPost, tblUserProfile, tblTagMasters, tblPostTags y tblUserLikes.
    2. Crea una clase que represente los parámetros de entrada para el procedimiento almacenado. En este caso, los parámetros de entrada son UserID, IsAdmin y Title.

    3. En tu controlador MVC, crea un método de acción que llame al procedimiento almacenado utilizando ADO.NET.

    4. Utiliza ADO.NET para recuperar los datos de cada tabla devuelta por el procedimiento almacenado y poblar las clases de modelo correspondientes.

    5. Pasa las clases de modelo como modelos de vista a tu vista de MVC, donde puedes mostrar los datos al usuario.

    Aquí tienes un ejemplo de cómo implementar el método de acción del controlador:

    public ActionResult Demo(long userID, bool isAdmin, string title)
    {
        var posts = new List<models.post>();
        var tags = new List<models.tagmaster>();
        var userLikes = new List<models.userlike>();
    
        using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString))
        {
            connection.Open();
    
            var command = new SqlCommand("uspDemo", connection);
            command.CommandType = CommandType.StoredProcedure;
    
            command.Parameters.Add(new SqlParameter("@UserID", SqlDbType.BigInt)).Value = userID;
            command.Parameters.Add(new SqlParameter("@IsAdmin", SqlDbType.Bit)).Value = isAdmin;
            command.Parameters.Add(new SqlParameter("@Title", SqlDbType.VarChar, 120)).Value = title;
    
            using (var reader = command.ExecuteReader())
            {
                // Recuperar los posts
                while (reader.Read())
                {
                    var post = new Models.Post();
                    // Poblar las propiedades del objeto post...
                    posts.Add(post);
                }
    
                reader.NextResult();
    
                // Recuperar las etiquetas
                while (reader.Read())
                {
                    var tag = new Models.TagMaster();
                    // Poblar las propiedades del objeto tag...
                    tags.Add(tag);
                }
    
                reader.NextResult();
    
                // Recuperar los Me gusta de los usuarios
                while (reader.Read())
                {
                    var userLike = new Models.UserLike();
                    // Poblar las propiedades del objeto userLike...
                    userLikes.Add(userLike);
                }
            }
        }
    
        var viewModel = new Models.DemoViewModel();
        viewModel.Posts = posts;
        viewModel.Tags = tags;
        viewModel.UserLikes = userLikes;
    
        return View(viewModel);
    }
    

    Ten en cuenta que esto es solo un ejemplo y es posible que necesites personalizar el código para adaptarlo a tu escenario específico.</models.userlike></models.tagmaster></models.post>

Comments are closed.