ASP.NET Создание модели MVC из базы данных (Postgres)

#asp.net-mvc #postgresql

#asp.net-mvc #postgresql

Вопрос:

Пожалуйста, простите меня, если этот вопрос слишком глуп, но я только начал изучать ASP в течение нескольких дней… Итак, я решил создать какое-нибудь простое веб-приложение, которое будет обрабатывать данные из базы данных (Postgres). Для подключения к базе данных я использую NpgsqlConnection class. Я видел несколько руководств по подключению к БД, т.Е. Здесь, Но почти везде они используют MSSQL, и нигде я не могу найти решения для моего случая. Итак, я хотел бы иметь модель, которая будет содержать все извлеченные данные внутри, я смогу выполнить итерацию следующим образом:

   <% foreach (var item in Model)
       { %>
    <tr>
        <td><%: item.Title %></td>
        <td><%: String.Format("{0:g}", item.ReleaseDate) %></td>
        <td><%: item.Genre %></td>
        <td><%: item.Rating %></td>
        <td><%: String.Format("{0:F}", item.Price) %></td>
    </tr>
    <% } %>
 

Итак, что я должен сделать для достижения этой цели?
Я думал создать класс

 public class Person{
int id;
string Name;
string Surname;
...
}
 

затем создайте общий список типов Person и после извлечения данных добавьте все выбранные данные в мой список. А затем каким-то образом передать этот список в качестве модели.

Я думаю, что есть лучший способ сделать это правильно. Есть предложения?

Ответ №1:

Нет, вы в значительной степени на верном пути.

Основное отличие, которое вы видите из руководств, заключается в том, что большинство из них, вероятно, используют entity Framework для заполнения моделей. Поскольку вы используете postgres … я бы не рекомендовал пытаться заставить entity framework работать с ним (я слышал, что это кошмар). Вы можете использовать другой Orm, если хотите, или просто сделать это с помощью команды подключения и reader, как вы, вероятно, привыкли.

Способ, которым я бы это сделал, — создать модель домена, которая выглядит так же, как модель базы данных (похоже на то, что вы сделали с Person )

Оттуда вы должны заполнить ее в контроллере.

 public class PersonController : Controller
{

    //this method will map to the Person/Index route by default
    public ActionResult Index()
    {
        //use your npgsqlconnection right now to populate whatever object you'd like
        List<Person> people = PopulateFromPostgres();

        //here were returning the index view with the model being a list of person
        return View(people)
    }
}
 

Тогда, по вашему мнению (Views/ Person/Index.cshtml я верю в этот пример)

 @model List<Person>

<table>
@foreach (var item in Model)
{
    <tr>
        <td>@item.Title</td>
        <td>@String.Format("{0:g}", item.ReleaseDate)</td>
        <td>@item.Genre</td>
        <td>@item.Rating </td>
        <td>string.Format("{0:F}", item.Price)</td>
    </tr>
}
</table>
 

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

Комментарии:

1. Спасибо за ваш ответ. Я думаю, что я правильно вас понял ;).