Is this last assumption right?
Sì, che altro pensi?
Within DDD there is the tendency where Entity equality is based on having the same id not the same memory address.
Questo non ha nulla a che fare con DDD. "Oggetti di database" hanno sempre bisogno di una chiave univoca o di un ID, in genere non esiste un "indirizzo di memoria" da memorizzare nel DB per distinguerli. Quindi c'è sempre un ID disponibile, che può essere usato anche per controllare l'uguaglianza per gli oggetti in memoria, indipendentemente dall'usare il modello di mappa di identità o meno. Avendo una "mappa di identità" in atto e assunta nel tuo contesto, puoi essere sicuro al 100% che nessun oggetto può essere creato senza prima controllare la "mappa di identità", è infatti possibile sostituire il test di identificazione con un test di indirizzo di memoria, ma in pratica i vantaggi sono IMHO molto piccoli.
I always had the "feeling" of having a unique instance of my objects*
Onestamente, avere un "sentimento" su qualcosa come questo è IMHO una parola diversa per non sapere come funziona qualcosa. E sì, usare un framework senza sapere cosa succede è sempre "pericoloso" (preferisco il termine "a rischio di errore"). Per essere più specifici: quando si utilizza un ORM, è necessario informarsi accuratamente se l'ORM fornisce già qualcosa come una "Mappa di identità" o "Cache oggetto" e quali caratteristiche fornisce esattamente.
Should I normally be concerned about my objects having multiple instances?
Ciò dipende in larga misura dall'applicazione gentile che si sta per scrivere, dal tipo di transazioni commerciali, dal numero di record coinvolti, dal tipo di query e così via. È perfettamente possibile scrivere applicazioni che creano oggetti dal database in un ambito locale, manipolarli e scriverli indietro, senza preoccuparsi di altre parti dell'applicazione che potrebbero avere una seconda copia dello stesso "oggetto db" allo stesso tempo . Ma se hai bisogno che la stessa informazione nella tua applicazione sia sempre sincronizzata, questa potrebbe non essere la strada da percorrere.
Or even being out of sync with the database?
Di nuovo, questo dipende. Per molte applicazioni non si può nemmeno evitare che le cose vadano fuori sincrono, almeno per un breve periodo (si pensi a uno scenario in cui un secondo client cambia il DB sulla rete, senza alcuna meccanica "push"). Ma per quanto tempo è tollerabile e se alcune transazioni devono essere sicure al 100% di avere i dati della versione più recente, dipende dalle tue esigenze.