2011-05-21 4 views
0

J'ai un problème avec le mappage d'une arborescence db classique vers une entité de structure d'entité.Entité framework 4.1 mappage d'arborescence

Voici mon db:

CREATE TABLE intranet_organization_units 
(
[OrganizationUnitId] INT IDENTITY PRIMARY KEY, 
[ParentOrganizationUnitId] INT NULL, 
[Name] NVARCHAR(50) NOT NULL 
) 

entité:

public class OrganizationUnit 
{ 
    public int OrganizationUnitId { get; set; } 
    public string Name { get; set; } 
    public int? ParentOrganizationUnitId { get; set; } 

    public virtual OrganizationUnit ParentOrganizationUnit { get; set; } 
    public virtual ICollection<OrganizationUnit> ChildrenUnits { get; set; } 
} 

et enfin la cartographie:

public class OrganizationUnitMapper : EntityTypeConfiguration<OrganizationUnit> 
    { 
     public OrganizationUnitMapper() 
     { 
      ToTable("intranet_organization_units"); 
      Property(x => x.Name).HasColumnName("Name").IsRequired(); 


      HasMany(x => x.ChildrenUnits).WithOptional().HasForeignKey(x => x.OrganizationUnitId); 
      HasOptional(x => x.ParentOrganizationUnit).WithMany().HasForeignKey(x => x.ParentOrganizationUnitId); 

     } 
    } 

Quand je lance l'application, je reçois cette exception:

Un ou plusieurs validat erreurs d'ions ont été détectées lors de la génération de modèle:

System.Data.Edm.EdmAssociationEnd:: Multiplicité est pas valable dans le rôle 'OrganizationUnit_ChildrenUnits_Target' en relation OrganizationUnit_ChildrenUnits ''. Étant donné que le rôle dépendant fait référence à les propriétés de clé, la limite supérieure de la multiplicité du rôle dépendant doit être 1 .

Alors, où est le problème? Merci

Répondre

4

Utilisez ceci:

public class OrganizationUnitMapper : EntityTypeConfiguration<OrganizationUnit> 
{ 
    public OrganizationUnitMapper() 
    { 
     ToTable("intranet_organization_units"); 
     Property(x => x.Name).HasColumnName("Name").IsRequired(); 

     this.HasOptional(x => x.ParentOrganizationUnit) 
      .WithMany(y => y.ChildrenUnits) 
      .HasForeignKey(x => x.ParentOrganizationUnitId); 
    } 
} 

Lors de la définition de cette cartographie de l'association vous dire:

  • Unité d'organisation a des parents en option
  • parent peut avoir plusieurs enfants
  • et enfant utiliser la propriété pour clé étrangère
+0

Fonctionne parfaitement. Merci beaucoup pour votre aide :) – Mennion

Questions connexes