我想要达到的目标是这样的:
使用列将数据保存到table1中:
Id|OperationNumber|Name|ContactNo
table1 Id
是主键
使用列将数据保存到table2中:
ReferenceId|OperationNumber
ReferenceId
是数据类型uniqueidentifier
两个表中的“ OperationNumber”列均相关。当数据保存在表1中时,OperationNumber也将与自动生成的ReferenceId
(uniqueidentifier
)一起保存在table2中
检索过程是:
ReferenceId
作为搜索这就是我的问题,如何保存和检索两个表中的数据?
这是我目前拥有的:
控制器:
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
时如何从两个表中检索详细信息?
答案 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