2013-06-05 72 views
0

我正在使用現有數據庫的EF代碼優先方法。場景如下:實體框架代碼首先定製CRUD操作

  1. 每當我插入數據,它應該生成一個自定義主鍵插入數據庫表。

  2. 同樣在刪除的情況下,它不應該執行刪除操作。它不僅應該修改刪除字段爲1,但也插入數據的其他一些領域,如ModificationDate,時間等。

  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"); 
    } 

回答

0

自己設置主鍵,添加DatabaseGeneratedOption.None屬性:

public class Child 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] //<<<<--- 
    public string ChildCounter { get; set; } 
    ... 
} 

這將允許您設置任何你所需要的ChildCounter財產。

邏輯上刪除,你需要一個刪除布爾屬性或類似添加到模型,然後更新,而不是刪除對象:

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(); 

真的不需要使用存儲過程。

+0

Thanks..it幫助 – AMS