Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

EF4.1:È possibile avere una relazione da zero o uno a zero o uno (da 0..1 a 0..1)?

No, non è possibile e dubito che funzioni in SQL Server. La relazione del database richiede che un'estremità diventi dipendente. Significa che fa riferimento alla chiave primaria (PK) di un'estremità principale:chiamiamo questa chiave esterna (FK). Se parliamo di relazione uno-a-uno, l'FK deve essere contrassegnato come univoco in modo che solo un record nella tabella dipendente possa fare riferimento a un determinato record dalla tabella principale. L'unica relazione valida in questo caso è 0..1 - 1 in cui il principale può esistere senza dipendente ma il dipendente può esistere solo se correlato al principale esistente perché il suo valore FK deve essere impostato sul valore PK del principale. Teoricamente FK può essere annullabile, ma dipende dal modo in cui il database implementa i vincoli univoci. Se il database conta null come un altro valore univoco, solo un record dipendente può avere FK impostato su null (penso che questo sia un caso di server SQL).

In EF questo è ancora più complicato perché EF non supporta vincoli univoci e per questo motivo puoi creare una relazione uno-a-uno solo quando FK nell'entità dipendente è anche il suo PK (=nessun modo per impostarlo su null). Se non puoi impostare FK su null, non puoi averlo annullabile e, a causa di quell'entità principale, deve esistere, altrimenti l'integrità referenziale genererà un errore.

La soluzione migliore per te è considerare Request come entità principale e Result come dipendente. La richiesta deve essere prima creata e deve essere conservata nel database fintanto che il Result . Result deve avere lo stesso valore PK (la colonna non può essere incrementata automaticamente) della corrispondente Request (e PK deve essere FK per Request ).