Si supponga Ho le seguenti due classi:Evitare specificando colonna chiave a doppia scenario legato
public class User : Entity
{
public virtual IList<Item> Items { get; set; }
}
public class Item : Entity
{
public virtual User Owner { get; set; }
}
ho creato due classi di mappatura:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
HasMany(x => x.Items);
}
}
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
Id(x => x.Id);
References(x => x.Owner);
}
}
questo si tradurrà in una tabella Item
che ha una colonna UserId
e una colonna OwnerId
. Quando utilizzo KeyColumn("OwnerId")
nella mappatura HasMany
, funziona solo con la colonna OwnerId
, ma vorrei evitarlo. C'è un modo per dire a NHibernate, di usare la colonna creata dal mapping in ItemMap
?
perché voglio evitare di specificare la colonna in modo esplicito:
Il nome della colonna OwnerId
viene automaticamente generato in base al nome della proprietà e alcune regole. Se cambio le regole o il nome della proprietà, devo ricordarmi di cambiare anche quello KeyColumn
. Quindi, in pratica, non si tratta di rifattorizzare il salvataggio.
È possibile modificare il nome della proprietà in Utente? utente virtuale utente pubblico {get; impostato; }. Dovresti cambiare anche la mappatura dei riferimenti. –
@ColeW: Beh, cambiare la proprietà in Utente ovviamente la risolverebbe, ma il nome della proprietà non sarebbe buono come ora. –
Sono d'accordo ma non credo che ci sia un modo pulito di fare ciò che stai chiedendo altrimenti. –