0

Ich mache ein Task-Management-Tool mit AngularJS für das Frontend und ASP.NET WEB API 2 für das Backend. Ich habe zwei Entitäten in der Datenbank, eine "Aufgabe" und einen "Typ". Für jede Aufgabe ist ein Typ zugeordnet. Der Benutzer füllt ein Formular, wenn er eine neue Aufgabe erstellen kann, und er muss einen Typ für diese Aufgabe auswählen.Wie man Entity-Beziehungen in WEB-API-Datenbank machen?

Hier ist der C# -Code:

// KBTM_Task.cs file 
public class KBTM_Task 
{ 
    public int ID { get; set; } 
    public string TaskID { get; set; } // User defined ID 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 

// KBTM_Type.cs file 
public class KBTM_Type 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

Also meine Frage ist: Wie kann ich "connect" die beide in der Datenbank? Was ich meine ist, sagen wir, ich möchte Daten an die Datenbank senden. Ich muss zwei POSTs machen, oder? Eine für die Aufgabe und eine für den Typ, da es sich um zwei separate Entitäten handelt.

Aber da sie mit zwei verschiedenen IDs gespeichert sind, woher weiß ich, dass eine bestimmte Aufgabe einen bestimmten Typ hat? Mit anderen Worten, wenn ich eine GET-Anfrage an KBTM_Task senden, wie bekomme ich den Typ dieser Aufgabe?

Antwort

1

Ändern Sie bitte Ihre KBTM_Task Unternehmen die Typ-ID und Fremdschlüsselbeziehung

public class KBTM_Task 
{ 
    public int ID { get; set; } 
    public string TaskID { get; set; } // User defined ID 
    public string Title { get; set; } 
    public string Description { get; set; } 

    public int TypeID { get; set; } 
    [ForeignKey("TypeID")] 
    public virtual KBTM_Type Type { get; set; } 
} 

diese Weise enthalten, wenn Sie die Daten aus der API Ihre Aufgabe Objekt erhalten bereits den Schlüssel enthalten („TypeID“), die sein kann aktualisiertes und verwandtes Objekt ("Typ"), auf das Sie seine Eigenschaften (Name, Beschreibung, ...) zugreifen können.

Wenn Sie TypeID für das Clientobjekt (Modell) aktualisieren, können Sie einfach das aktualisierte Aufgabenobjekt mithilfe von $ http.put() an die API senden, um die Datenbankaktualisierung zu verarbeiten.

+0

Hallo. Entschuldigung wegen der Verzögerung bei der Beantwortung. Mit diesen Änderungen bekomme ich einen 'POST http: // localhost: 59862/api/KBTM_Task 500 (Interner Serverfehler) ', wenn ich versuche, an die KBTM_Task-Entität zu senden. Kennst du den Grund warum? –

+0

Haben Sie sich die gesendeten JSON-Daten angeschaut, um zu überprüfen, dass sie gültig sind? Überprüfen Sie den Anforderungsheader für den Post. – jbrown

1

1) Hinzufügen Fremdschlüssel fließend api (oder Daten Annotations)

// KBTM_Task.cs file 
public class KBTM_Task 
{ 
    public int ID { get; set; } 
    public string TaskID { get; set; } // User defined ID 
    public string Title { get; set; } 
    public string Description { get; set; } 

    public int KBTM_TypeID {get;set} 
    public virtual KBTM_Type {get; set} 
} 

// KBTM_Type.cs file 
public class KBTM_Type 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public KBTM_Task KBTM_Task { get; set;} 
} 

von DbContext

erbt die folgende in der Klasse hinzufügen
public class KbtmContext : DbContext 
{ 
    ... 
    //public virtual DbSet<KBTM_Task> KbtmTasks {get; set;}  
    ... 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Configure KBTM_TypeID as FK for KBTM_Task 
     modelBuilder.Entity<KBTM_Task>() 
       .HasRequired(k => k.KBTM_Type) 
       .WithRequiredPrincipal(ad => ad.KBTM_Task); 

    } 
} 

2) Wenn die Objektklasse in API-Antwort aussetzt oder anfordern, dann müssen Sie die Navigationseigenschaft von der Serialisierung ausschließen.

// KBTM_Task.cs file 
public class KBTM_Task 
{ 
    ... 
    [JsonIgnore] 
    public virtual KBTM_Type Type { get; set; } 
} 

Um die [JsonIgnore] atttribute Verwendung Install-Package Newtonsoft.Json in Paket-Manager-Konsole zu verwenden. (Eine der beliebtesten Lösungen Serialisierung zu verwalten) dort