我正在使用现有数据库进行EF Code First Approach。方案如下:
每当我插入数据时,它都应该生成一个自定义的主键,以便插入到数据库表中。
同样在Delete的情况下,它不应该执行删除操作。它不仅应该将Deleted字段修改为1,还应该在其他一些字段中插入数据,如ModificationDate,Time等。
如果我需要使用存储过程,也请告诉我。
注意:“主键”列是非种子varchar列。
public class Child {
[Key]
public string ChildCounter { get; set; }
public string CouncilCode { get; set; }
public string CentreCode { get; set; }
public string DateBirth { get; set; }
public string GivenNames { get; set; }
public string FamilyName { get; set; }
public string FatherCounter { get; set; }
public virtual Father Father { get; set; }
}
我是EF的新手,所以任何代码示例都应该受到高度赞赏。
public ActionResult Create() {
return View();
}
//
// POST: /Child/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(tblChild tblchild) {
if (ModelState.IsValid) {
db.tblChilds.Add(tblchild);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tblchild);
}
public ActionResult Delete(string id = null) {
tblChild tblchild = db.tblChilds.Find(id);
if (tblchild == null)
return HttpNotFound();
return View(tblchild);
}
//
// POST: /Child/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(string id) {
tblChild tblchild = db.tblChilds.Find(id);
db.tblChilds.Remove(tblchild);
db.SaveChanges();
return RedirectToAction("Index");
}
答案 0 :(得分:0)
<强> 1 强>
要自己设置主键,请添加DatabaseGeneratedOption.None属性:
public class Child
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)] //<<<<---
public string ChildCounter { get; set; }
...
}
这将允许您将ChildCounter属性设置为您需要的任何属性。
<强> 2 强>
要进行逻辑删除,您需要添加Deleted布尔属性或类似于模型,然后更新而不是删除对象:
public class Child
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public string ChildCounter { get; set; }
...
public bool Deleted {get; set;} //<<<<---
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(string id)
{
var tblchild = db.tblChilds.Find(id);
tblchild.Deleted = true;
db.SaveChanges();
return RedirectToAction("Index");
}
当您希望显示子项目列表时,您需要记住确保只从数据库中撤回非“删除”项目:
var childItems = db.tblChilds.Where(c => !c.Deleted).ToList();
第3 强>
根本不需要使用存储过程。