2012-11-16 20 views
6

nel mio database ci sono tavoli assegnazione e Workplace, concettualmente, ogni incarico avviene a esattamente un posto di lavoro. Il assegnazione tabella contiene una colonna Workplace, che è una chiave esterna che fa riferimento WorkplaceName colonna Workplace del tavolo.Mappatura una chiave esterna per qualcosa di diverso da una chiave primaria

Questo è lo schema:

table Workplace (
    ID int primary key, 
    WorkplaceName int 
) 

table Assignment (
    Workplace int 
) 

E il mio mappatura:

class Workplace 
{ 
    public virtual int ID { get; set; } 
    public virtual int WorkplaceName { get; set; } 
} 

class Assignment 
{ 
    public virtual Workplace { get; set; } 
} 

class AssignmentMap : ClassMap<Assignment> 
{ 
    public AssignmentMap() 
    { 
    References(a => a.Workplace); 
    } 
} 

In fase di esecuzione ottengo l'eccezione

No fila con l'identificatore dato esiste [MyProject.Workplace # 2001]

Il problema qui sembra essere che FH cerca il valore della proprietà Assignment. Workplace nella colonna Workplace.ID, la chiave primaria della tabella; la posizione corretta sarebbe la colonna Workplace.WorkplaceName. Ho provato a utilizzare il metodo ForeignName, pensando di poter specificare WorkplaceName in questo modo. Come posso dire a FH come unire le colonne corrette?

risposta

2

Ho trovato la risposta qui: FluentNHibernate Many-To-One References where Foreign Key is not to Primary Key and column names are different

La soluzione era quella di utilizzare PropertyRef; la linea si legge ora:

References(x => x.Workplace).PropertyRef(x => x.WorkplaceName).Fetch.Join(); 

Quello che non mi rendevo conto era che avevo bisogno di dare un riferimento dell'oggetto lato client proprietà WorkplaceName, invece di cercare di istruire la mappatura di utilizzare il server-side colonna WorkplaceName.

0

credo che debba essere qualcosa come

References(x => x.Workplace).Column("WorkplaceName")

+0

L'ho provato; non cambia il risultato. Credo che il metodo 'Column' sia usato per specificare il nome della colonna locale, come il secondo argomento di' References' - potrei sbagliarmi comunque. – waldrumpus

Problemi correlati