0

我正在使用现有数据库开发 EF Code First Approach。场景如下:

  1. 每当我插入数据时,它应该生成一个自定义的主键以插入到数据库表中。

  2. 同样在删除的情况下,它不应该执行删除操作。它不仅应该将 Deleted 字段修改为 1,还应该在 ModificationDate、Time 等其他字段中插入数据。

  3. 如果我需要在其中使用存储过程,也请告诉我。

注意:主键列是非种子 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");
    }
4

1 回答 1

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

根本不需要为此使用存储过程。

于 2013-06-05T07:44:30.320 回答