Vogliamo utilizzare la relazione opzionale uno ad uno utilizzando Entity Framework Code First. Abbiamo due entità.Relazione facoltativa uno ad uno utilizzando Entity Framework Fluent API
public class PIIUser
{
public int Id { get; set; }
public int? LoyaltyUserDetailId { get; set; }
public LoyaltyUserDetail LoyaltyUserDetail { get; set; }
}
public class LoyaltyUserDetail
{
public int Id { get; set; }
public double? AvailablePoints { get; set; }
public int PIIUserId { get; set; }
public PIIUser PIIUser { get; set; }
}
PIIUser
possono avere un LoyaltyUserDetail
ma LoyaltyUserDetail
deve avere un PIIUser
. Abbiamo provato queste tecniche di approccio fluente.
modelBuilder.Entity<PIIUser>()
.HasOptional(t => t.LoyaltyUserDetail)
.WithOptionalPrincipal(t => t.PIIUser)
.WillCascadeOnDelete(true);
Questo approccio non ha creato LoyaltyUserDetailId chiave esterna nella tabella PIIUsers.
Successivamente abbiamo provato il seguente codice.
modelBuilder.Entity<LoyaltyUserDetail>()
.HasRequired(t => t.PIIUser)
.WithRequiredDependent(t => t.LoyaltyUserDetail);
Ma questa volta EF non ha creato chiavi esterne in queste 2 tabelle.
Avete qualche idea per questo problema? Come possiamo creare una relazione opzionale one to one usando entity framework fluent api?
Non corrisponde a tale limite l'utente su quale campo FK scegliere? (Penso che lo voglia, ma non mi ha riferito in modo che non lo sappia), perché sembra che voglia avere un campo FK presente nella classe. –
concordato. È una limitazione di come funziona EF. 1: 1 e 1: 0..1 dipendono dalle chiavi primarie. Altrimenti penso che ti stia sforzando di "FK univoco" che non è ancora supportato in EF. :((Sei più un esperto di db ... è corretto ... questo è davvero un FK unico?) E non sarà nel prossimo Ef6 come da: http://entityframework.codeplex.com/ workitem/299 –
Sì, @FransBouma, volevamo utilizzare i campi PIIUserId e LoyaltUserId come chiavi esterne, ma EF ci limita in questa situta come menzionato tu e Julie.Grazie per le risposte –