2013-08-06 4 views
2

J'ai des problèmes avec la création d'une relation 1 à plusieurs dans ma classe Products à la classe ProductSpecification qui a deux clés primaires ProductId, SpecificationId. La classe Produits n'a pas toujours de classe de spécification de produit. Personne ne sait comment résoudre mon problème. Je reçois une erreur avec upperbound. 1. Je suis nouveau sur EF et je fais du code en premier, alors si vous savez quoi faire, veuillez laisser un explication détaillée merci.EF plusieurs colonnes de clé un à plusieurs

Classes:

public class ProductSpecification 
{  
    [Key] 
    [Column(Order = 1)] 
    public long ProductId { get; set; } 

    [Key] 
    [Column(Order = 2)] 
    public long SpecificationId { get; set; } 


    [ForeignKey("ProductId")] 
    public virtual Product Product { get; set; } 
    [ForeignKey("SpecificationId")] 
    public virtual Specification Specification { get; set; } 
} 


public class Specification 
{ 
    [Key] 
    public long SpecificationId { get; set; } 

    [Required(ErrorMessage = "Please enter a product specification name.")] 
    [DataType(DataType.Text)] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Please enter a product specification value.")] 
    [DataType(DataType.Text)] 
    public string Value { get; set; } 

    [ForeignKey("SpecificationId")] 
    public virtual ICollection<ProductSpecification> ProductSpecs { get; set; } 
} 

DataContext:

modelBuilder.Entity<ProductSpecification>().HasKey(x => new { x.ProductId, x.SpecificationId }); 

modelBuilder.Entity<Specification>().HasOptional(x => x.ProductSpecs) 
    .WithMany().HasForeignKey(x => x.SpecificationId); 
+0

Je pense que vous devez choisir entre les styles courants et les annotations ... Je ne pense pas que vous pouvez utiliser * both * pour définir les mêmes choses. –

+0

Avez-vous la même erreur si vous supprimez le ' code modelBuilder'? –

+0

Si je supprime les annotations de données, j'obtiens la même erreur Conflits de multiplicité – ONYX

Répondre

0

Faites votre ForeignKey annulable:

longtemps public? SpecificationId {get; ensemble; }

public virtual Spécification? Spécification {get; ensemble; }

Questions connexes