MVC.Net Core 2.0 |查询SQL Server数据库并在网格视图中返回结果

MVC.Net Core 2.0 |查询SQL Server数据库并在网格视图中返回结果,.net,sql-server,database,asp.net-core-2.0,.net,Sql Server,Database,Asp.net Core 2.0,目前我正在学习.NETCore2.0,并且已经构建了一个相当简单的web应用程序,但是,我对MVC结构的“模型”方面做得不多 我有一个测试SQL Server,它运行在一个单独的Windows Server虚拟机上,我想将它引入到应用程序中 基本上,该数据库包含一个包含人员列表的表。我只想通过一个简单的查询,在我的一个应用程序页面的gridview中显示这些数据 i、 e.从人物中选择头衔、名字、姓氏、地址、字符串、电话号码 我想要一些建议,或者是代码,或者是一个链接到一个好的资源/教程,指导我

目前我正在学习.NETCore2.0,并且已经构建了一个相当简单的web应用程序,但是,我对MVC结构的“模型”方面做得不多

我有一个测试SQL Server,它运行在一个单独的Windows Server虚拟机上,我想将它引入到应用程序中

基本上,该数据库包含一个包含人员列表的表。我只想通过一个简单的查询,在我的一个应用程序页面的gridview中显示这些数据

i、 e.
从人物中选择头衔、名字、姓氏、地址、字符串、电话号码

我想要一些建议,或者是代码,或者是一个链接到一个好的资源/教程,指导我如何做到这一点

请记住,我是在远离web开发很长一段时间后学习MVC的,我以前的经验是在ASP web窗体中将数据表绑定到gridview


谢谢。

我的建议是从.Net Core 2.0上的Microsoft Docs和Entity Framework Core开始:

总之,您将使用.NETCore作为MVC层,并将EntityFrameworkCore作为您的ORM(基本上是您的数据库交互模型)。一旦您熟悉了EF Core,您可能会发现您实际上需要较旧的“完整”实体框架,以下是关于差异的简短总结:

还有其他非微软的ORMs,但我还是坚持使用微软的stack,因为它通常都是为协同工作而设计的,而且微软提供了很好的端到端教程


一旦你完成了第一个教程,你可能还想考虑一个客户端库来处理你的网格、搜索、排序等等。您还可以在该网站上找到对它的良好支持。

我的建议是从.Net Core 2.0上的Microsoft文档和Entity Framework Core开始:

总之,您将使用.NETCore作为MVC层,并将EntityFrameworkCore作为您的ORM(基本上是您的数据库交互模型)。一旦您熟悉了EF Core,您可能会发现您实际上需要较旧的“完整”实体框架,以下是关于差异的简短总结:

还有其他非微软的ORMs,但我还是坚持使用微软的stack,因为它通常都是为协同工作而设计的,而且微软提供了很好的端到端教程


一旦你完成了第一个教程,你可能还想考虑一个客户端库来处理你的网格、搜索、排序等等。在这个站点上,您也会发现对它的良好支持。

在MVC中,没有要绑定的gridview,也没有与webforms不同的ViewState。对于模型部分,最好将其扩展为使用独立于模型/域模型的视图模型

可以将视图模型看作是一种使您能够更好地控制来自数据库的数据形状的东西。请注意,在下面的
PersonViewModel
中,我选择排除映射到表主键的
PersonID
。我还添加了一个字段,返回此人的全名(lastname,firstname)。这些更改仅与视图模型隔离,不影响域模型

模型(可映射到数据库表/列):

ViewModel(本质上使您能够更好地控制页面上显示的内容):

控制器代码(您可以在其中将字段值从域模型传输到视图模型。为简单起见,我选择手动分配字段值,但有类似的工具可以简化此过程):

public ActionResult Index()
{
//从数据库返回列表
var peopleList=datasource.GetPeople();
var peopleVM=新列表();
//创建PersonViewModels的列表
foreach(人员列表中的人员)
{
var personVM=新PersonViewModel()
{
FirstName=person.ForeName;
LastName=个人。姓氏;
Address=person.AddressString;
头衔=人。头衔;
电话=person.TelNum;
};
peopleVM.Add(personVM);
}
返回视图(peopleVM);
}
视图(显示视图模型的位置。在webforms中,实际上没有“绑定”和ViewState开箱即用的概念,也没有GridView/ListView之类的内置控件,除非您打算使用MVC扩展,如:

@型号列表
@foreach(模型中的人)
{
person.FullName
人名
个人电话
个人地址
}

至于好资源的链接,你不能错误地使用and。

在MVC中,没有gridview可绑定,也没有webforms中不同的ViewState。对于模型部分,最好将其扩展为使用独立于模型/域模型的视图模型

可以将视图模型看作是一种使您能够更好地控制来自数据库的数据形状的东西。请注意,在下面的
PersonViewModel
中,我选择排除映射到表主键的
PersonID
。我还添加了一个字段,返回此人的全名(lastname,firstname)。这些更改仅与视图模型隔离,不影响域模型

模型(可映射到数据库表/列):

ViewModel(本质上使您能够更好地控制页面上显示的内容):

控制器代码(您可以在其中将字段值从域模型传输到视图模型)。为简单起见,我选择手动分配字段值,但有一些工具
public class Person
{
    [Key]
    public Guid PersonID { get; set; }
    public string Title { get; set; }
    public string ForeName { get; set; }
    public string SurName { get; set; }
    public string TelNum { get; set; }
    public string AddressString { get; set; }
}
public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string Telephone { get; set; }
    public string Title { get; set; }

    public string FullName 
    {
        get { return string.Format("{0}, {1}", this.LastName, this.FirstName); }
    }
}
public ActionResult Index()
{
    // returns List<Person> from the database
    var peopleList = datasource.GetPeople();

    var peopleVM = new List<PersonViewModel>();

    //create a list of PersonViewModels
    foreach (person in peopleList)
    {
        var personVM = new PersonViewModel()
        {
             FirstName = person.ForeName;
             LastName = person.SurName;
             Address = person.AddressString;
             Title = person.Title;
             Telephone = person.TelNum;                 
        };
        peopleVM.Add(personVM);
    }

    return View(peopleVM);
}
@model List<Namespace.Models.PersonViewModel>

<table>
    @foreach (person in Model)
    {
        <tr>
            <td>person.FullName</td>
            <td>person.Title</td>
            <td>person.Telephone</td>
            <td>person.Address</td>
        </tr>
    }
</table>