110 messaggi dal 08 febbraio 2007
Ho un database con questa situazione :

Tabella Clienti :

IdCliente
RagioneSociale
IdIndirizzo1
IdIndirizzo2


Tabella Indirizzi :

IdIndirizzo
Via
Citta
ecc ecc


I campi "IdIndirizzo1,IdIndirizzo2" della tabella Clienti dovrebbero essere
in relazione 1-1 con la tabella indirizzi,
SQL server di suo me li imposta a molti-a-uno

e su Codefirst mi vengono cosi'

this.HasRequired(t => t.Indirizzo1)
.WithMany(t => t.Clienti1)
.HasForeignKey(d => d.IdIndirizzo1);


come posso fare almeno su Codefirst la relazione one-to-one ?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

mtugnoli ha scritto:

SQL server di suo me li imposta a molti-a-uno

Sì, effettivamente è normale che sia così perché non c'è alcun vincolo fisico che impedisca a due o più clienti di avere lo stesso IdIndirizzo. Di qui il rapporto molti-a-uno.

mtugnoli ha scritto:

come posso fare almeno su Codefirst la relazione one-to-one ?

Il mapping 1-a-1 lo configuri da interfaccia fluente in questo modo:
modelBuilder.Entity<Cliente>().HasRequired(cliente => cliente.Indirizzo1).WithRequiredDependent();

...ma non andrà bene nel tuo caso perché EF si basa sulle chiavi primarie delle entità per realizzare questo tipo di relazione. Le tue chiavi esterne IdIndirizzo1 e IdIndirizzo2 non verranno prese in considerazione.

Dovresti, secondo me, riconsiderare la relazione che esiste tra Clienti e Indirizzi. Il fatto che tu abbia Indirizzo1 e Indirizzo2 mi fa pensare che tra loro esista una relazione uno a molti.
Se così non fosse, perché ad esempio Indirizzo1 indica un'abitazione e Indirizzo2 contiene i dati di fatturazione, allora hai due relazioni 1-a-1 e vanno mappate come tali: avrai una tabella IndirizziResidenziali e una tabella IndirizziFatturazione, le cui chiavi primarie sono intere non autoincrementanti e che hanno lo stesso esatto valore dell'IdCliente a cui si riferiscono.

ciao,
Moreno
Modificato da BrightSoul il 25 novembre 2015 23.50 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.