Associazione di entità a contesti di dati
-
09-06-2019 - |
Domanda
In LINQ to SQL, è possibile verificare se un'entità fa già parte del contesto dei dati prima di provare ad allegarla?
Un po' di contesto se può aiutare...
Ho questo codice nel mio global.asax
come metodo di aiuto.Normalmente, tra una richiesta e l'altra, questo non è un problema.Ma subito dopo aver effettuato l'accesso, questo viene chiamato più di una volta e la seconda volta finisco per provare ad allegare il file Member
oggetto nella stessa unità di lavoro in cui è stato creato.
private void CheckCurrentUser()
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
AppHelper.CurrentMember = null;
return;
}
IUserService userService = new UserService();
if (AppHelper.CurrentMember != null)
userService.AttachExisting(AppHelper.CurrentMember);
else
AppHelper.CurrentMember = userService.GetMember(
HttpContext.Current.User.Identity.Name,
AppHelper.CurrentLocation);
}
Soluzione
Credo che ci siano due metodi per farlo.
DataContext.TableName.Contains(Item)
oppure usiamo il campo id.Se l'elemento è inserito nel Database, gli verrà assegnata una riga.
if(Item.id == 0)
DataContext.Insert(Item)
else
DataContext.Update(Item)
Altri suggerimenti
Invece di collegarsi a un nuovo contesto dati, perché non ripetere semplicemente la query dell'oggetto nel nuovo contesto dati?Ritiene che sia una strategia più affidabile e apolide.