Entity Framework Erstellen neuer Datenzeilen während db.SaveChanges ()

Erstellen einer AngularJS-Anwendung basierend auf diesem Lernprogramm:http://jphoward.wordpress.com/2013/01/04/end-to-end-web-app-in-under-an-hour/

Klassen:

public class Todo
{
    public int ID { get; set; }
    public virtual Status Status { get; set; }
}

public class Status
{
    public int ID { get; set; }
    public string Type { get; set; }
}

Funktionalität ist, dass Sie auf eine Schaltfläche klicken und den Status ändern. Wenn Sie auf die Schaltfläche klicken, werden alle erforderlichen Informationen an Visual Studio übergeben. Ursprünglich wurde es überhaupt nicht aktualisiert. Nach einigen Recherchen habe ich einige Möglichkeiten gefunden, um die Änderungen zu erzwingen, aber dann fügt es bei db.SaveChanges () eine neue Zeile zu Status hinzu, die den gleichen 'Typ' hat, nur eine inkrementierte ID von der, unter der sich die letzte befindet.

JS, das update aufruft:

Api.Todo.update({ id: todoID }, todo, function () {
    $location.path('/');
});

Was trifft VS auf diese Funktion:

private DataContext db = new DataContext();

// PUT api/Todo/5
HttpResponseMessage PutTodo(int id, Todo todo)
{
    if (!ModelState.IsValid)
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
    }

    if (id != todo.ID)
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }

    // Found a stack overflow that mentioned that you need to check for things already being tracked
    var entry = db.Entry(todo);

    if (entry.State == EntityState.Detached)
    {
        var set = db.Set<Todo>();
        Todo attachedEntity = set.Find(todo.ID);  // You need to have access to key
        if (attachedEntity != null)
        {
            // The following code does not update any changes to the foreign keys
            var attachedEntry = db.Entry(attachedEntity);
            attachedEntry.CurrentValues.SetValues(todo);
            db.Entry(attachedEntity).State = EntityState.Modified;

            // When this didn't work, I tried just changing the status on the already attached entity
            //attachedEntity.Status = todo.Status;
            //db.SaveChanges();
            // However when it hit SaveChanges() it created a new row in the Status table.
        }
        else
        {
            //This code was never hit
            entry.State = EntityState.Modified; // This should attach entity
        }
    }

    try
    {
        db.SaveChanges();
    }
    catch (DbUpdateConcurrencyException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }

Ich stehe kurz vor dem Ende meiner Fähigkeiten und würde gerne ein bisschen Hilfe oder Anleitung bekommen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage