2016-04-25 4 views
0

konfrontiert Ich versuche write LINQ to Add or Update, aber für mich EntityState.Modified funktioniert nicht.Mit einem Problem mit hinzufügen oder aktualisieren Szenario

Werfen Sie einen Blick auf meinen Code und lassen Sie mich wissen, wenn Sie einen Fehler sehen. Nur neue Datensatz einfügen funktioniert, aber Update funktioniert nicht. Ich verwende EF 6.0.

dbContext _context = new dbContext();    
string userName = //getting this value from somewhere else; 
string userRoleNo = //getting this value from somewhere else; 
Student student = new Student 
{ 
    userName = userName, 
    userRoleNo = userRoleNo, 
    Date = DateTime.Now 
}; 
bool exist = _context.Students.Any(x => x.UserId == new Guid(userId)); 
if (exist) 
    _context.Entry(Student).State = EntityState.Modified;    
else 
    _context.Students.Add(student); 

_context.SaveChanges(); 
+0

sein, was ist? Fällt der Code in den else-Teil? – Haris

+0

Schauen Sie sich diese Art des Vergleichs von GUIDs an: http://stackoverflow.com/questions/5725044/how-do-i-perform-a-case-insensitive-compare-of-guids-with-linq – DrinkBird

+0

Harry existiert wahr, Code fällt wenn Teil. _context.Entry (Student) .State = EntityState.Modified; Wird ausgeführt, tut aber nichts in der Tabelle – simbada

Antwort

0

ich denke, es

db.Entry(student).State = EntityState.Modified 

und nicht

db.Entry(Student).State = EntityState.Modified 
0

nur hinzufügen, wenn es ein neuer Schüler ist sein sollte. Wenn nicht, wird EF die Änderungen für Sie verfolgen. Auf diese Weise können Sie das Tracking und das Anhängen an EF belassen.

dbContext _context = new dbContext();  
var student = _context.Students.FirstOrDefault(x => x.UserId == new Guid(userId)); // Get the existing student. 
bool exists = true; 
if(student == null){ 
    student = new Student(); 
    exists = false; 
} 

string userName = //getting this value from somewhere else; 
string userRoleNo = //getting this value from somewhere else; 
student.userName = userName; // Do you really want to reset this? 
student.userRoleNo = userRoleNo; 
student.Date = DateTime.Now: 

if(!exists){ 
    _context.Students.Add(student); 
} 
_context.SaveChanges(); 

Befestigen und EntityState.Modified wird nur dann benötigt, wenn Sie nicht das Element aus dem Kontext holen. Aber in diesem Fall wird es funktionieren, den Gegenstand stattdessen zu holen.

0

Der richtige Weg, dies zu tun, wird der Wert von exist

using(_context = new dbContext()){ //This will dispose the context   
string userName = //getting this value from somewhere else; 
string userRoleNo = //getting this value from somewhere else; 
Student student = _context.Students.FirstOrDefault(x => x.UserId == new Guid(userId)); 


if (student != null) 
{ 
    student.userName = userName; 
    student.userRoleNo = userRoleNo; 
    student.Date = DateTime.Now ; 
    _context.Entry(student).State = EntityState.Modified;  
}   
else 
{ 
     student = new Student() { 
     userName = userName, 
     userRoleNo = userRoleNo, 
     Date = DateTime.Now 
    }; 
    _context.Students.Add(student); 
} 
_context.SaveChanges(); 
}; 
Verwandte Themen