Хранимая процедура не вызывается при выполнении проекта mvc.net

Курсовая работа, первый asp,net проект и не работает процедура в коде должным образом.

Мне кажется в asp.net нужно иначе работать с хранимыми процедурами в бд но не понимаю как.
Используется Entity 6 (НЕ Core).
Модель принимается как null и выдает

User Lookup Results No users found for the specified email.

т.к. модель null

рут:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
 
namespace Translaters_Agency
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
            routes.MapRoute(
                name: "UserLookup",
                url: "UserLookup/{action}/{id}",
                defaults: new { controller = "UserLookup", action = "FindUserByEmail", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    } 
}

Data Context:

using Data.Models;
using System.Collections.Generic;
using System.Data.Entity;
 
namespace Data
{
    public class DataContext : DbContext
    {
        public DataContext() : base("DefaultConnection")
        {
        }
 
        public DbSet<User> Users { get; set; }
        public DbSet<Translator> Translators { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Comment> Comments { get; set; }
        public DbSet<Certificate> Certificates { get; set; }
        public DbSet<Rating> Ratings { get; set; }
        public DbSet<MarketingCalendar> MarketingCalendars { get; set; }
        public DbSet<FileTableModel> Files { get; set; } 
        public DbSet<Payment> Payments { get; set; }
        public DbSet<TranslatorOrder> TranslatorOrders { get; set; } 
        
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
}

namespace Data.Modelsnamespace Data.Models
{
    public class UserSearchResultModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
}
 
{
    public class UserResultViewModel
    {
        [Required(ErrorMessage = "Email is required")]
        [EmailAddress(ErrorMessage = "Invalid email address")]
        public string Email { get; set; }
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

Контроллер:

using Data.Models;
using Data;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web.Mvc;
using System;
using System.Linq;
 
[RoutePrefix("UserLookup")]
public class UserLookupController : Controller
{
    private readonly DataContext _context;
 
    public UserLookupController()
    {
        _context = new DataContext();
    }
 
    [HttpGet]
    [Route("FindUserByEmail")]
    public ActionResult FindUserByEmail()
    {
        // экземп модели с дефолтными значениями
        var defaultModel = new UserResultViewModel
        {
            Email = "[email protected]"
        };
 
        //  модель в представление
        return View(defaultModel);
    }
 
    [HttpPost]
    public ActionResult FindUserByEmail(UserResultViewModel model)
    {
        try
        {
            if (ModelState.IsValid)
            {
                System.Diagnostics.Debug.WriteLine($"Input Email: {model.Email}");
                SqlParameter param = new SqlParameter("@Email", model.Email);
                IEnumerable<UserSearchResultModel> results = _context.Database.SqlQuery<UserSearchResultModel>("EXEC FindUserByEmail @Email", param).ToList();
                System.Diagnostics.Debug.WriteLine($"Number of Results: {results?.Count()}");

                // Перенаправление на представление с результатом
                return View("UserLookupResult", results);
            }

            System.Diagnostics.Debug.WriteLine("Model state is not valid");
 
            return View(model);
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine($"Exception: {ex.Message}");
 
            // Обработка ошибок, если необходимо
            ViewBag.ErrorMessage = ex.Message;
            return View("Error");
        }
    }

    [HttpGet]
    [Route("UserLookupResult")]
    public ActionResult UserLookupResult(IEnumerable<UserSearchResultModel> results)
    {
        return View(results);
    }
}

Представление:

@model IEnumerable<Data.Models.UserSearchResultModel>
 
@{
    ViewBag.Title = "User Lookup Results";
}
 
<h2>User Lookup Results</h2>
 
@if (Model != null)
{
    <table class="table">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
        @foreach (var user in Model)
        {
            <tr>
                <td>@user.Id</td>
                <td>@user.Name</td>
                <td>@user.Email</td>
            </tr>
        }
    </table>
}
else
{
    <p>No users found for the specified email.</p>
}
 
<p>@Html.ActionLink("Back to Search", "FindUserByEmail")</p>

Сама процедура прекрасно работает в БД.

use Translaters_Buro
go
ALTER PROCEDURE [dbo].[FindUserByEmail]
@Email NVARCHAR(100)
AS
BEGIN

SELECT Id, Name, Email
FROM Users
WHERE Email = @Email;
END;
exec FindUserByEmail '[email protected]'

Пробовал ловить ошибки, менять структуру процедуры, брать данные напрямую из основной модели.


Ответы (0 шт):