Voglio solo aggiornare un campo in base alla condizione menzionata di seguito. So come scriverlo in SQL. Non sono sicuro di come raggiungere questo obiettivo nel quadro delle entità.
UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime
Voglio utilizzare questa particolare query a causa dell'utilizzo di un'architettura di micro-servizi.
Se si desidera utilizzare sql direttamente, è possibile utilizzare ExecuteSqlCommand
Se stavi gestendo un oggetto e facessi un aggiornamento, cambierei un oggetto e chiamerei SaveChanges
, ma non è così. Ecco un aggiornamento direttamente alla tabella, se quella tabella ha milioni di righe, vuoi eseguire sql
per ottenere prestazioni su quello.
esempio
using(var context = new SampleContext())
{
var commandText = "UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime";
var newDateTime = new SqlParameter("@NewDateTime", myDateValue);
var myId = new SqlParameter("@MyId", myIdValue);
context.Database.ExecuteSqlCommand(commandText, new[]{newDateTime,myId});
}
Se Id
è una chiave primaria, il che significa che trovi solo un record con esso, quindi il modo in cui lo aggiornerei è recuperare il record, cambiare il valore delle proprietà che voglio modificare, quindi salvare le modifiche nel contesto.
int MyId = ...
DateTime NewDateTime = ...
using (YourDbContext dbContext = new YourDbContext())
{
YourObject obj = dbContext.YourObjects.SingleOrDefault(item => item.Id == MyId && item.SomeDateTime > NewDateTime)
if (obj != null)
{
obj.SomeDateTime = NewDateTime;
dbContext.SaveChanges();
}
}