2016-05-13 16 views
2

Ich arbeite an Entity-Framework mit Datenbank ersten Ansatz und ich kam unten Problem.Wie erreicht man partielle Aktualisierung in Entity Framework 5/6?

Ich habe eine Customer-Tabelle mit Spalten col1, col2, col3, ...., col8. Ich habe eine Entität für diese Tabelle erstellt und diese Tabelle enthält bereits ca. 100 Datensätze. Von den oben genannten 8 Spalten ist Spalte 4 als Nicht-Null markiert.

Class Customer 
    { 
     member col1; 
     member col2; 
     member col3; 
     member col4; 
     . 
     . 
     member col8; 
    } 
    class Main 
    { 
     //main logic to read data from database using EF 
     Customer obj = object of Customerwith values assigned to col1,col2 and col3 members 
     obj.col2=some changed value. 
     DBContext.SaveChanges(); //<- throws an error stating it is expecting value of col4. 

    } 

In meiner Anwendung, Ich versuche, die eine der Aufzeichnung unter Verwendung der gespeicherten Prozedur mit EF und gespeicherte Prozedur liefert nur col1, col2 und col3 zu lesen. Ich versuche, den geänderten Wert von Col2 zu speichern und zu versuchen, mit DBContext zurück in die Datenbank zu speichern. Es wird jedoch ein Fehler angezeigt, der besagt, dass der Wert des erforderlichen Felds col4 nicht angegeben ist.

FYI: Ich habe ein paar Foren und Frage und Option gegangen, um mit deaktivierten Verifikation auf SaveChanges gehen, ist nicht machbar für mich.

Gibt es einen anderen Weg, durch den ich teilweise Aktualisierung erreichen kann?

Antwort

1

Ich denke, EntityFramework.Utilities erfüllt Ihre Bedingungen.

Dieser Code:

using (var db = new YourDbContext()) 
{ 
    db.AttachAndModify(new BlogPost { ID = postId }).Set(x => x.Reads, 10); 
    db.SaveChanges(); 
} 

werden einzelne SQL-Befehl erzeugen:

exec sp_executesql N'UPDATE [dbo].[BlogPosts] 
SET [Reads] = @0 
WHERE ([ID] = @1) 
',N'@0 int,@1 int',@0=10,@1=1 
+0

Lassen Sie mich versuchen, dies zu haben und Sie über die Ergebnisse zu aktualisieren. – atp9

+0

@ atp9, hallo! Wie geht es dir damit? =) –

0

deaktiviert Verifizierung auf Savechanges ist für mich nicht möglich

Sicher es ist. Sie sogar haben, um die Validierung beim Speichern zu deaktivieren. Aber dann kannst du das ganze Wesen nicht als modifiziert markieren, was ich denke, dass du es getan hast. Sie müssen einzelne Eigenschaften als geändert markieren:

var mySmallCustomer = someService.GetCustomer(); // from sproc 
mySmallCustomer.col2 = "updated"; 

var myLargeCustomer = new Customer(); 
context.Customers.Attach(myLargeCustomer); 
Entry(myLargeCustomer).CurrentValues.SetValues(mySmallCustomer); 

// Here it comes: 
Entry(myLargeCustomer).Property(c => c.col2).IsModified = true; 

context.Configuration.ValidateOnSaveEnabled = false; 
context.SaveChanges(); 

Sie sehen also, es ist genug, um den "kleinen" Kunden zu bekommen. Von diesem Objekt erstellen Sie eine Stub-Entität (myLargeCustomer), die zum Aktualisieren der einen Eigenschaft verwendet wird.

Verwandte Themen