ASP.Net MVC-如何从一个数据库中的两个表中保存和检索数据

时间:2018-08-20 02:57:21

标签: sql-server asp.net-mvc

我想要达到的目标是这样的:

  1. 填写视图中的表格
  2. 使用列将数据保存到table1中:

    Id|OperationNumber|Name|ContactNo
    

    table1 Id是主键

  3. 使用列将数据保存到table2中:

    ReferenceId|OperationNumber
    

    ReferenceId是数据类型uniqueidentifier

  4. 的主键

两个表中的“ OperationNumber”列均相关。当数据保存在表1中时,OperationNumber也将与自动生成的ReferenceIduniqueidentifier)一起保存在table2中

检索过程是:

  1. 输入ReferenceId作为搜索
  2. 在结果视图中显示表1和表2的所有详细信息

这就是我的问题,如何保存和检索两个表中的数据?

这是我目前拥有的:

控制器:

public ActionResult Create()
{
     return View();
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(RefViewModel myViewModel)
{
     db.Table1.Add(myViewModel.Ref);
     db.SaveChanges();
     return RedirectToAction("Index");
}

型号:

public class RefViewModel
{
     public Table1 Ref { get; set; }
     public string OperationNumber { get; set; }
     public string Name { get; set; }
     public string ContactNo { get; set; }
}

在上面的代码中只能保存在table1中。那该怎么做才能保存两个表?

(哦,顺便说一句。您可能已经注意到,“ Bind(Include =“不存在,我已禁用它,因为在保存到数据库时会得到空值。),无论如何,这不再是问题了。刚刚提到)

数据库是SQL Server

编辑:关于检索数据

SearchController:

public ActionResult Search(string searchString)
{
     var myRef = (from x in db.Table1
                  where x.OperationNumber.Contains(searchString)
                  select x).FirstOrDefault();
     return View(myRef);
}

当我输入operationnumber时返回详细信息。所以问题是当我仅输入referenceId时如何从两个表中检索详细信息?

3 个答案:

答案 0 :(得分:0)

您可以使用存储过程轻松地做到这一点。定义两个属性类来表示两个表,并按如下所示使用继承。

public class Tablel
{
     public string ID { get; set; }
     public string OperationNumber { get; set; }
     public string Name { get; set; }
     public string ContactNo { get; set; }
}

public class Table2 extend Table1
{
     public string ReferenceID { get; set; }
     public string OperationNumber { get; set; }

}

现在,您可以使用存储过程来保存和检索数据库中的数据。从数据库检索数据时使用联接,将数据保存到两个表时可以使用两个单独的查询。

答案 1 :(得分:0)

来自DbContext.SaveChanges()的c#元数据:-

返回:         //写入基础数据库的对象数。

所以基本上,您将执行以下操作:-

public ActionResult Create(RefViewModel myViewModel)
{
     db.Table1.Add(myViewModel.Ref);
     var t1 = db.SaveChanges();

     Table2 t2 = new Table2
     {
        OperationNumber = t1.OperationNumber
     };

     db.Table2.Add(t2);
     db.SaveChanges();

     return RedirectToAction("Index");
}

调用SaveChanges时,它将返回所有保存到数据库的对象,因此,当您第一次调用SaveChanges时,它将返回一个Table1对象,并使用该Table1对象填充Table2的OperationNumber属性并调用SaveChanges再次。

答案 2 :(得分:0)

如果您的操作号是唯一的,则在存储过程中使用此查询,则可以使用ReferenceID查找数据

Select * from table1 t1 
inner join table2 t2 on t1.OperationNumber = t2.OperationNumber
where t2.ReferenceID = @pReferenceID