2017-09-30 1 views
0

Ich brauche Hilfe mit Entity Framework.Erhalte ID nach dem Hinzufügen eines neuen Elements von Entity Framework

Controller:

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

Modell:

[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; } 
} 

In diesem Code, habe ich einen neuen Besuch in der Datenbank, und ich möchte id nach der Codezeile db.visit.Add (visit) der Besuch bekommen. Wenn ich neue drugsEdition und neue accessoryEdition hinzufüge, ist dieser Code richtig und fügte gut hinzu, aber als ich servicesEdition idVisit = 0 hinzufügte. Warum 'servicesEdition' nicht gutes idVisit erhält?

+0

Wie sieht die 'ServicesEdition' Klassendefinition aus? – Shyju

Antwort

0

Wenn Sie eine virtual Navigations Eigenschaft des Typs hinzufügen Visit wird EF den entsprechenden Besuch id bekommen und das füllen, wenn sie ein servicesEdition Objekt auf Ihrem SaveChanges Methodenaufruf speichert.

Ich würde auch die Fremdschlüsseleigenschaft in VisitId umbenennen, so dass die referenzielle Integrität per Konvention funktioniert (Namenskonvention) und Sie das Attribut ForeignKey nicht explizit verwenden müssen. Ich würde Ihnen auch empfehlen PascalCasing zu verwenden, wenn C# -Klassen Schreiben

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

(nicht unbedingt erforderlich für Ihren Code zu arbeiten) Wenn Sie nicht die ServicesEdition Entitätsdefinition verändern wollen, wie ich oben beschrieben, eine weitere Option zu nennen die Methode SaveChanges(), nachdem Sie die Visit-Entität hinzugefügt haben, und Sie können dann auf die Id-Eigenschaft davon zugreifen.

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

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

danke, eigentlich habe ich virtuellen Besuch in einer anderen Klasse 'accumulateEdition' und 'drugsEdition' Aber ich wusste nicht, dass es eine Verbindung zwischen Entität gab. –

0

Das Problem ist db.visit.Add(visit); ist id nicht zu erzeugen, bis db.SaveChanges();

Hit

Sie db.SaveChanges(); nach db.visit.Add(visit); hinzufügen könnte. Oder Sie sparen als eine Grafik wie Shyju erklärt.

Verwandte Themen