2011-03-27 19 views
22

Estoy trabajando en Entity Framework 4.1 y utilizando anotaciones de datos para claves externas. Quiero saber cómo podemos definir la relación uno a muchos entre productos y categorías. Quiero mapear la categoría. categoryId con product.cidClaves foráneas en el marco de entidad 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; } 
} 

Para sugerir

Respuesta

24

Ambos enfoques deben trabajar:

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; } 
} 

O:

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 se utiliza para vincular navegación PR operty y propiedad de clave externa. Contiene el nombre de la propiedad de navegación relacionada o el nombre de la propiedad de clave externa relacionada.

+0

@Ladislave ¿No será [ForeignKey ("CategoryId")] dentro del Producto? – DotnetSparrow

+0

@Anyone ¿Puede alguien explicarme si existen diferencias entre estos dos enfoques? Parecen idénticos, pero ¿hay algo que pueda hacer que un desarrollador elija un método sobre el otro? – Ray

6

Se utilizan entityconfigurations para esto.

En el entityconfiguration, añadir esta asignación a la categoría entityconfiguration:

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

sólo es necesario hacer un mapa en una de sus clases y DbContext es lo suficientemente inteligente como para usarlo.

Consulte este blog post para obtener más información.

EDITAR Para hacer esto utilizando las anotaciones de datos Creo que el enfoque correcto es el siguiente:

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

@Gates: Quiero hacerlo usando anotaciones de datos – DotnetSparrow

+0

@Gates ¿Cómo puedo hacer esto usando anotaciones de datos en lugar de con fluidez API – DotnetSparrow

+0

Creo que eso es todo. No he usado anotaciones para esto desde CTP4 que es 1 versión atrás, pero estoy bastante seguro de que es correcto. – Gats

Cuestiones relacionadas