2017-09-30 69 views
0

我需要實體框架的幫助。通過實體框架添加新項目後獲取ID

控制器:

public ActionResult Create([Bind(Prefix = "visit")] visit visit, [Bind(Prefix = "drugsEdition")] IEnumerable<drugsEdition> drugsEdition, [Bind(Prefix = "accessoryEdition")] IEnumerable<accessoryEdition> accessoryEdition, [Bind(Prefix = "servicesEdition")] IEnumerable<servicesEdition> servicesEdition) 
{ 
    Models.VisitDetails visitDetails = new Models.VisitDetails(); 
    visitDetails.visit = visit; 

    if (ModelState.IsValid) 
    { 
     db.visit.Add(visit); 

     if (drugsEdition != null) 
     { 
      foreach (var item in drugsEdition) 
      { 
       item.idVisit = visit.id; 
       db.drugsEdition.Add(item); 
      } 
     } 

     if (accessoryEdition != null) 
     { 
      foreach (var item in accessoryEdition) 
      { 
       item.idVisit = visit.id; 
       db.accessoryEdition.Add(item); 
      } 
     } 

     if (servicesEdition != null) 
     { 
      foreach (var item in servicesEdition) 
      { 
       item.idVisit = visit.id; 
       db.servicesEdition.Add(item); 
      } 
     } 

     db.SaveChanges(); 

     return RedirectToAction("Details", new { id = visit.id }); 
    } 

    return View(visitDetails); 
} 

型號:

[Table("servicesEdition")] 
public partial class servicesEdition 
{ 
    public int id { get; set; } 

    public int idService { get; set; } 
    public int idVisit { get; set; } 
    public double priceSell { get; set; } 

    [ForeignKey("idService")] 
    public virtual services services { get; set; } 
} 

在這段代碼中,我添加到數據庫中一個新的訪問,我希望得到參觀的id代碼行db.visit.Add (visit)後。當我添加新的drugsEdition和新accessoryEdition,此代碼是正確的,並添加好idVisit,但是當我添加servicesEdition idVisit = 0.爲什麼'servicesEdition'沒有得到好的idVisit?

+0

'ServicesEdition'類定義是怎麼樣的? – Shyju

回答

0

如果添加Visit類型的virtual導航性能,EF就會獲得相應的訪問ID,並填寫在當它在你的SaveChanges方法調用節省了servicesEdition對象。

我還將外鍵屬性重命名爲VisitId,以便參照完整性按照約定(命名約定)工作,並且不需要明確使用ForeignKey屬性。我也建議你使用PascalCasing編寫C#類時(不一定需要爲您的代碼工作)

public partial class ServicesEdition 
{ 
    public int id { get; set; } 

    public int idService { get; set; } 

    public int VisitId { get; set; } 

    public virtual Visit Visit { get; set; } 

    public double priceSell { get; set; } 

    [ForeignKey("idService")] 
    public virtual services services { get; set; } 
} 

如果你不希望像我上述改變ServicesEdition實體定義,另一種選擇是調用在添加訪問實體後,您可以訪問該ID的Id屬性,然後使用SaveChanges()方法。

db.visit.Add(visit); 
db.SaveChanges(); 

var visitId = db.Id; 
//Now you can use visitId to save other entities 
+0

謝謝,實際上我在另一個班的'accessoryEdition'和'drugsEdition'中有虛擬訪問但是我不知道實體之間有連接。 –

0

問題是db.visit.Add(visit);不生成ID,直到打db.SaveChanges();

你可以db.visit.Add(visit);後添加db.SaveChanges();。 或者您將保存爲Shyju解釋的圖形。