Errore DeleteOnNull
-
16-09-2019 - |
Domanda
Ho un insieme di oggetti DB seduto in un EntitySet sulla mia definizione dell'oggetto principale. Questo gestisce integrazioni e aggiornamenti bene, ma ho trovato le voci rimozione dalla lista non ha provocato i record del database viene cancellato, quindi ho dovuto creare un metodo nell'oggetto repository di dati per eliminare i record come l'oggetto di dati non lo fa avere accesso ai dati contesto in cui viene utilizzato.
Stavo cercando di vedere se riuscivo a portare questa eliminare nell'oggetto principale e ho trovato l'attributo DeleteOnNull all'associazione, ma quando lo uso, ottengo un errore "DeleteOnNull può essere vero per i membri dell'associazione Singleton solo mappato non nullable colonne chiave esterna". Il mio codice è:
private EntitySet<UserSite> _userSites = new EntitySet<UserSite>();
[Association(Name = "User_UserSites", Storage = "_userSites", ThisKey = "UserID", OtherKey = "UserID", DeleteOnNull=true)]
public IList<UserSite> UserSites { get { return _userSites; } set { } }
il mio oggetto usersite è
[Table(Name="UserSite")]
public class UserSite
{
[Column]//(IsPrimaryKey = true)]
public int UserID { get; set; }
[Column]//(IsPrimaryKey = true)]
public string Site { get; set; }
[Column]
public bool DefaultSite { get; set; }
[Column(IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)]
public int UniqueID { get; set; }
}
È possibile utilizzare DeleteOnNull per mantenere tutti i miei metodi di aggiornamento dei dati nel mio oggetto utente principale, o devo gestire le eliminazioni a livello repository?
Soluzione
DeleteOnNull è solo per Singleton associazioni . Così si può mettere sul UserSite.User ma non su User.UserSites. E 'ancora non è così automatica come si vorrebbe che fosse, però. C'è un esempio qui.
E 'difficile per LINQ to SQL per dedurre il comportamento desiderato, perché non può indovinare se si desidera composizione o aggregazione , quindi sceglie la congettura di sicurezza (aggregazione).