2011-10-12 8 views
8

Ho la seguente classe:EF Codice Prima - API fluente (WithRequiredDependent e WithRequiredPrincipal)

public class User 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public Couple Couple { get; set; } 
} 

public class Couple 
{ 
    public Guid Id { get; set; } 
    public User Groom { get; set; } 
    public User Bride { get; set; } 
} 

punti importanti:

  1. Bride e Groom proprietà sono necessari
  2. One rapporto uno
  3. Nella classe User, è necessario Couple

DbContext in OnModelCreating

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredPrincipal(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent(); 

Ma non si può pretendere!

Tutti i campi sono con null nel database !.

Come si ottengono i campi nel database come non null? Se possibile, utilizzare l'API Flient.

risposta

5

Dovrebbe essere questo:

modelBuilder.Entity<User>().HasRequired(u => u.Couple).WithRequiredDependent(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Bride).WithRequiredDependent(); 
modelBuilder.Entity<Couple>().HasRequired(u => u.Groom).WithRequiredDependent(); 

Come funziona WithRequiredDependent: Configura il rapporto per essere richiesto: richiesta senza una proprietà di navigazione sul lato opposto della relazione. Il tipo di entità in fase di configurazione sarà dipendente e contiene una chiave esterna per il principale. Il tipo di entità che i target di relazione saranno il principale nella relazione.


Significato: Prendiamo in considerazione la prima linea di codice qui. Si crea una chiave esterna nell'entità in fase di configurazione (User) ed è Dependent e rendendo l'altro lato della relazione (Coppia) Principal


Importante: Don pensi che la configurazione che desideri genererà un punto morto? Non ho testato il codice sopra, ma questa configurazione sembra essere un deadlock per me quindi non sono sicuro se EF ti permetterebbe di crearlo. L'utente deve avere bisogno di una coppia, e la coppia deve aver bisogno di quello stesso utente, credo.