J'utilise Entity Framework 4.1 dans l'application MVC 3. J'ai une entité où j'ai la clé primaire se compose de deux colonnes (clé composite). Et ceci est utilisé dans une autre entité comme clé étrangère. Comment créer la relation? Dans les scnerios normaux, nous utilisons:
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 CategoryId { get; set; }
public virtual Category Category { get; set; }
}
mais que faire si la catégorie a deux colonnes clés?
c#
entity-framework
ef-code-first
foreign-keys
composite-key
DotnetSparrow
la source
la source
virtual
sur les propriétés de navigation est nécessaire pour le chargement paresseux.virtual
sur les propriétés scalaires facilite le suivi des modifications des objets attachés..HasRequired(p => p.Category)
maisProduct
n'a pas de propriété de l' entitéCatagory
mais deux identifiants qui constituent la clé composite d'une catégorie. Pouvez-vous s'il vous plaît expliquer, parce que je crois qu'il ne sera même pas compilé ... Merci!Product
aCategory
dans ma réponse.Je pense que le moyen le plus simple est d'utiliser l'annotation de données sur la propriété Navigation comme ceci:
[ForeignKey("CategoryId1, CategoryId2")]
public class Category { [Key, Column(Order = 0)] public int CategoryId1 { get; set; } [Key, Column(Order = 1)] public int CategoryId2 { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { [Key] public int ProductId { get; set; } public string Name { get; set; } public int CategoryId1 { get; set; } public int CategoryId2 { get; set; } [ForeignKey("CategoryId1, CategoryId2")] public virtual Category Category { get; set; } }
la source
Navigation
propriétés. Cependant, comment puis-je définircascadeDelete: false
pour cette propriété uniquement, pas à l'échelle du site? Merci