Как смоделировать отношения один ко многим с помощью Dapper и ASP.NET MVC - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в Dapper или даже в ASP.NET MVC и пытаюсь написать очень простое приложение CRUD. В основном у меня есть две таблицы User и File. В таблице «Пользователь» хранятся некоторые сведения о пользователе, и при нажатии кнопки «Детали» должны отображаться дополнительные сведения и файлы, которые пользователь будет загружать (их может быть не более или не более 10).

В таблице файлов хранятся имена файлов. Как мне создать модель, а затем посмотреть на что-то подобное, используя Dapper. Это кажется простым, но я не могу понять это. Могу ли я поместить обе модели в поле зрения, а затем перебрать модель файла, чтобы отобразить файлы, если таковые имеются. если так то как?

вот мой контроллер данных.

public ActionResult Details(int id)
    {
        Users user = new Users();
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myconn"].ConnectionString))
        {
            user= db.Query<Users>("SELECT * FROM Users As t LEFT JOIN Files AS f ON  t.EID = f.EID WHERE t.EID=" +id, new{ id }).SingleOrDefault() ;
        }
        return View(trade);
    }

1 Ответ

0 голосов
/ 18 сентября 2018

Прежде всего, попробуйте больше узнать об архитектуре, сначала научитесь организовывать свой код. Например, вызов базы данных напрямую из контроллера - плохая идея. Я бы сделал что-то вроде этого:

Переместите все вызовы базы данных в отдельные классы репозитория в соответствии с обязанностями.

public class UsersRepository
{
    public User GetUser(int id)
    {
        User user = new User();
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myconn"].ConnectionString))
        {
            user= db.Query<User>("SELECT * FROM Users where EID=@id", new{ id }).SingleOrDefault();
        }
        return user;
    }

    public List<File> GetUserFiles(int id)
    {
        List<File> files = new List<File>();
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myconn"].ConnectionString))
        {
            files = db.Query<File>("SELECT * FROM Files where UserID=@id", new{ id });
        }
        return files;
    }
}

Создание модели для хранения ваших данных для подробного просмотра

public class UserDetails
{
    public User User { get; set; }
    public List<File> Files { get; set; }
}

Создание сервиса или движка для организации вашей бизнес-логики

public class UsersService
{   
    private UsersRepository _usersRepository;

    public UsersService()
    {
        _usersRepository = new UsersRepository();
    }

    public UserDetails GetUserDetails(int userId)
    {
        var details = new UserDetails();
        details.User = _usersRepository.GetUser(id);
        details.Files = _usersRepository.GetUserFiles(id);
        return details;     
    }       
}

Позвоните в контроллер

public class UsersController : Controller // or whatever the base class you have
{       
    private UsersService _usersService;

    public UsersController()
    {
        _usersService = new UsersService();
    }

    public ActionResult Details(int id)
    {
        var details = _usersService.GetUserDetails(id);
        return View(details);
    }   
}

Но имейте в виду, что это очень упрощенный пример. Например, лучше использовать внедрение зависимостей, чем инициализировать сервисы или репозитории в конструкторе. Также во многих случаях не очень разумно использовать одни и те же классы для логики представления и репозитория, рассмотрите возможность использования DTO и классов доменов. Для простых приложений и демонстрации все должно быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...