0

Je fais beaucoup de google mais je n'arrive pas à l'obtenir complètement, here J'ai trouvé peu d'informations utiles mais pas de succès. Ci-dessous ma question,Relation un-à-un/un et un-à-plusieurs dans Entity Framework 5

J'ai ci-dessous classes et besoin d'un moyen de spécifier la relation dans le modèle d'entité.

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 
    public int? HomeAddressId { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 
    public virtual Address HomeAddress{ get; set; } 
} 
public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 
    public int UserId { get; set; } 
    public string AddressLine1 { get; set; } 

    // other properties 
    public virtual User User { get; set; } 
} 

L'exigence est chaque utilisateur a plusieurs adresses et chaque adresse est associée à un utilisateur (un-plusieurs). L'une des adresses est l'adresse personnelle et l'utilisateur a HomeAddres (facultatif). HomeAddressId est FK (nullable) à la table d'adresses. Comment définir cette relation dans le code du modèle d'entité, de préférence dans la méthode API Fluent?

+0

si vous avez copié votre code et de le coller ici.y vous avez une mauvaise définition Membre utilisateur de Adress. Je l'ai changé. et ce code devrait fonctionner. Vous pouvez également modifier votre modèle. Les adresses collectent toutes les adresses. vous pouvez séparer l'adresse par type en tant que membre AddresType de l'adresse. –

Répondre

0

Je préfère montrer le code de ma façon simple.

public class User 
    { 
     [Key] 
     public int UserId { get; set; } 
     public int? HomeAddressId { get; set; } 

     public virtual ICollection<Address> Addresses { get; set; } 
     public Address HomeAddress { 
      get { 
       if(Addresses != null) 
        return Addresses.FirstOrDefault(p=> p.AddressType.Home); 
       return null; 
      } 
     } 
    } 
    public enum AddressType 
    { 
     Unknown, 
     Home, 
     Office 
    } 
public class Address 
{ 
    [Key] 
    public int AddressId { get; set; } 
    public int UserId { get; set; } 
    public string AddressLine1 { get; set; } 
    public AddressType AddressType {get; set; } 

    // other properties 
    public virtual User User { get; set; } 
} 

Deuxième langue.

public class User 
{ 
    public int UserId { get; set; } 
    public virtual Address HomeAddress { get; set; } 
    public virtual int? HomeAddressId { get; set; } 
    public virtual ICollection<Address> OfficeAddresses { get; set; } 
} 

public class Address 
{ 
    public int AddressId { get; set; } 
    public string AddressLine1 { get; set; } 
} 

public class UserMap : MapEntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     //Other definitions PK etc... 

     this.HasOptional(o => o.HomeAddress) 
       .WithMany() 
       .HasForeignKey(a => a.HomeAddressId); 

     this.HasMany(t => t.OfficeAddresses) 
      .WithMany() 
      .Map(m => 
      { 
       m.ToTable("UserOfficeAddresses"); 
       m.MapLeftKey("AddressId"); 
       m.MapRightKey("UserId"); 
      }); 
    } 
} 
//and define Address Configurations.. MapEntityTypeConfiguration<Address> 
+0

peut-être cela va résoudre la question mais pas selon mon approche, je ne veux pas ajouter un champ AddressType supplémentaire sur l'adresse ici. La question est d'avoir HomeAddressId sur l'objet Utilisateur et l'utiliser. –

+0

je vois. c'est juste une solution simple et facile. D'autres akternatives vous devriez employer l'api fluide pour définir des relations. Je vais essayer de l'oublier. ;) –

+0

seconde ce que vous demandez. –