22

Je travaille sur Entity Framework 4.1 et utilise des annotations de données pour les clés étrangères. Je veux savoir comment pouvons-nous définir un à plusieurs relation entre le produit et les catégories. Je veux mapper la catégorie. categoryId avec product.cidClés étrangères dans entity framework 4.1

public class Category 
{ 
    public string CategoryId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public string CId { get; set; } 

    public virtual Category Category { get; set; } 
} 

S'il vous plaît suggérer

Répondre

24

Ces deux approches devraient fonctionner:

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    [ForeignKey("Category")] 
    public string CId { get; set; } 

    public virtual Category Category { get; set; } 
} 

Ou:

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public string CId { get; set; } 

    [ForeignKey("CId")] 
    public virtual Category Category { get; set; } 
} 

ForeignKeyAttribute est utilisé pour coupler la navigation pr propriété de propriété privée et étrangère. Il contient le nom de la propriété de navigation associée ou le nom de la propriété de clé étrangère associée.

+0

@Ladislave Ne sera-t-il pas [ForeignKey ("CategoryId")] dans Product? – DotnetSparrow

+0

@Anyone Quelqu'un peut-il m'expliquer s'il y a des différences entre ces deux approches? Ils semblent identiques mais y a-t-il quelque chose qui pourrait amener un développeur à choisir une méthode plutôt qu'une autre? – Ray

6

Vous utilisez entityconfigurations pour cela.

Dans le entityconfiguration, ajoutez cette carte à la catégorie entityconfiguration:

HasMany<Product>(x => x.Products).WithRequired().HasForeignKey(x => x.CId); 

Vous ne devez mapper sur une de vos classes et DbContext est assez intelligent pour l'utiliser.

Voir ce blog post pour plus d'informations.

EDIT Pour ce faire, utilisez les annotations de données, je crois que l'approche correcte est la suivante:

[RelatedTo(RelatedProperty="Products", Key="CId", RelatedKey="CategoryId")] 
public virtual Category Category { get; set; } 
+0

@Gates: Je veux le faire en utilisant des annotations de données – DotnetSparrow

+0

@Gates Comment puis-je faire cela en utilisant des annotations de données au lieu de parler couramment API – DotnetSparrow

+0

Je pense que c'est tout. Je n'ai pas utilisé d'annotations pour ça depuis CTP4 qui est en version 1, mais je suis sûr que c'est correct. – Gats

Questions connexes