2015-10-13 11 views
5

Ich weiß, dass das Aktualisieren von Entitäten, ohne sie zuerst auszuwählen, ein häufiges Problem ist und viele Lösungen bereits auf StackOverflow sind, aber nach dem Lesen habe ich immer noch ein Problem.Aktualisieren einer Entität mit den erforderlichen Eigenschaften in Entity Framework

Ich verwende den folgenden Code einen Benutzerrechtsträger zu aktualisieren:

using (var context = GetContext()) 
    { 
    var userEntity = new UserEntity() { ID = userUpdate.ID }; 
    context.Users.Attach(userEntity); 
    context.Entry(userEntity).CurrentValues.SetValues(userUpdate); 
    context.SaveChanges(); 
    } 

Jedoch führt dies zu einem DbEntityValidationException geworfen, weil mein Benutzer einige Rechtsträger erforderlichen Eigenschaften haben, aber diese sind nicht unbedingt festgelegt auf dem aktualisierten Entität.

Gibt es eine Möglichkeit, oder ist es einfach, die erforderlichen Eigenschaften zu entfernen?

Danke!

+1

Warum begrenzen Sie nicht die a vailable Konstruktoren für 'UserEntity' zu denen, die es nicht in einem ungültigen Zustand initialisieren? –

+0

Ich habe in dieser Instanz keine Werte für die erforderlichen Eigenschaften - eine User-Entität benötigt beispielsweise die E-Mail-Eigenschaft, aber möglicherweise wird nur der Name des Benutzers aktualisiert und das userUpdate enthält sonst nichts. Ohne den Benutzer aus der Datenbank auszuwählen, kann ich nicht wissen, auf was diese erforderlichen Eigenschaften eingestellt sind. Wählen Sie die Entität dann aktualisieren _does_ Arbeit, aber es ist nicht gerade ideal, um eine unnötige Abfrage zu machen, wenn ich nicht muss. –

+0

@NathanCooper Es muss einen parameterlosen Konstruktor geben oder EF kann keine Entitäten erstellen. – DavidG

Antwort

4

Ich habe hier eine Antwort gefunden: Entity Framework/MVC3: temporarily disable validation

Durch vorübergehend zu deaktivieren Validierung Ich kann die Prüfungen umgehen und eine beliebige Anzahl von Werten einfügen, ohne zuerst die erforderlichen Eigenschaften abzurufen:

using (var context = GetContext()) 
{ 
    var userEntity = new UserEntity() { ID = userUpdate.ID }; 
    context.Users.Attach(userEntity); 
    context.Entry(userEntity).CurrentValues.SetValues(userUpdate); 

    // Disable entity validation 
    context.Configuration.ValidateOnSaveEnabled = false; 

    context.SaveChanges(); 
} 
1

Wenn Sie nur bestimmte Felder in Ihrem Unternehmen aktualisieren möchten, ohne dass die ganze Sache aus der Datenbank abgerufen werden zuerst:

var userEntity = new UserEntity() { ID = userUpdate.ID }; 
userEntity.SomeProperty = userUpdate.SomeProperty; 

//Tell EF to only update the SomeProperty value: 
context.Entry(userEntity).Property(x => x.SomeProperty).IsModified = true; 

context.SaveChanges(); 
+0

Leider hilft das nicht mit dem Problem, dass die erforderlichen Eigenschaften nicht festgelegt werden. Eine Ausnahme wird immer noch ausgelöst, wenn ich die erforderlichen Eigenschaften nicht aus der Konfiguration entferne. –

Verwandte Themen