如何使用代码优先数据库创建编辑/删除/创建视图

时间:2018-11-20 03:37:09

标签: c# asp.net-mvc database code-first

这是我的ClientController模型

namespace CV_Website.Models
{
public class Clients
{
    [Key]

    public int ID { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }

.......

    public List<CV> cVs;

}
public class CV
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Job { get; set; }
    public bool Public { get; set; }
}
}

还有我的DbContext

namespace CV_Website.Models
{
public class ClientsContext : DbContext
{
 public ClientsContext() : base("name=ClientsContext")
    {
    }

    public DbSet<Clients> Clients { get; set; }

}

我已经能够使用硬编码用户(供测试使用)填充视图,但不能使用模型填充

这是我的硬编码用户

 public List<Clients> GenerateCV()
    {
     data.AllClients.Clear()
     List<Clients> result = new List<Clients>();
     List<ClientsContext> contexts = new List<ClientsContext>()
     Clients test = new Clients
     {
         Name = "John",
         Age = 18,
         Gender = "Male",

...          };

     Clients test2 = new Clients
     {
         Name = "Sam",
         Age = 18, 
         Public = true

... };

        result.Add(test);
        result.Add(test2);

        return result;
    }`

我不确定如何使用MVC脚手架工具添加Create / Edit / View和views,我通常会得到System.NullReferenceException 我对编码还是很陌生,不确定自己在做什么错 在此先感谢

2 个答案:

答案 0 :(得分:0)

代码首先根据我们的课程为我们创建一个数据库,请参考以下链接获取答案:

Basics for code first approach

Code first demo

答案 1 :(得分:0)

首先,类应该是根据Microsoft's naming conventions的名词,因此我将Clients重命名为Client。

正如您所说的,数据库没有问题,我将重点介绍控制器和视图。

列出客户

客户端控制器中的以下操作会将客户端列表从数据库返回到视图:

// GET: CV_Website/Clients/ClientList
[HttpGet]
public ActionResult ClientList()
{
    //using statement disposes the connection to the database once query has completed
    using (var context = new ClientContext())
    {
        //.ToList runs the query and maps the result to List<Client>
        var clients = context.Clients.ToList();
    }

    //Return view with list of clients as the model
    return View("ClientList", clients);
}

只需右键单击此方法中的任意位置,然后选择“添加视图”即可创建视图。

如果选择“列表”作为模板,选择“客户端(CV_Website.Models)”作为Model类,它将创建一个视图,该视图列出列表中每个客户端的详细信息。

在视图中,您可以看到以下代码行:

@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })

这些是指向控制器内操作的URL。

编辑客户端

作为示例,这是Edit的实现:

//Added third parameter to clearly point to 'Client' controller
@Html.ActionLink("Edit", "Edit", "Client", new { id=item.ID })

此URL指向客户端控制器中名为“ Edit”的操作,该操作将读取另一个名为“ Edit”的视图。该实现将类似于以下内容:

// GET: CV_Website/Clients/Edit/1
[HttpGet]
public ActionResult Edit(int id)
{
    using (var context = new ClientContext())
    {
        //Using Linq, select the client with the matching ID or return null
        var client = context.Clients.SingleOrDefault(c => c.Id == id);
    }

    return View("ClientList", client);
}

再次单击鼠标右键,然后选择“添加视图”。这次再次选择“编辑”模板和客户端模型。

这将创建一个具有可提交给控制器的表单的视图。为了提高可读性,我将这样编写using语句:

@using (Html.BeginForm("Edit", "Client", FormMethod.Post))

“编辑”操作的实现与此类似:

// POST: CV_Website/Clients/Edit/{Client}
[HttpPost]
public ActionResult Edit(Client client)
{
    using (var context = new ClientContext())
    {
        //Get client from database
        var clientInDb = context.Clients.SingleOrDefault(c => c.Id == client.ID);

        //Update client using properties from the client parameter
        clientInDb.Age = client.Age;
        clientInDb.Gender = client.Gender;
        clientInDb.Name = client.Name;
        clientInDb.Surname = client.Surname;

        //Commit changes to the database
        context.SaveChanges();
    }

    return View("ClientList", client);
}

这将更新数据库中的客户端并保存更改。


我希望这可以帮助您入门。

有关DbContext here

的更多信息