2

Je crée de nouveaux modèles pour lesquels je vais laisser EF générer la base de données. Les modèles ressemble à ceci:Entity Framework CTP5, Code-First. Aide à la création de tables de référence via le modèle objet

public class Model 
{ 
    public int Id { get; set; } 
    public string StyleNumber { get; set; } 
    public virtual IList<Metal> Metals { get; set; } 
    public virtual IList<ModelImage> Images { get; set; } 
} 

public class Metal 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

Je voudrais métal à une table de référence w/les deux colonnes, le champ « Description » être unique. Au lieu de cela, EF crée la table Métal avec une colonne supplémentaire référençant l'ID du modèle. Existe-t-il un moyen simple de modifier le comportement via des annotations de données ou l'API fluide?

Répondre

3

EF pense que vous avez une relation un-à-plusieurs entre le modèle & Metal et la manière la plus simple de modéliser en stockant l'ID du modèle dans la table Metal. Si vous souhaitez conserver la table Métal "propre" (c'est-à-dire sans relation), les données de relation doivent être stockées dans une table séparée, mais en modifiant implicitement la relation entre le modèle & Métal. Si vous voulez vraiment aller jusqu'au bout, vous pouvez dire à EF que vous voulez une relation unidirectionnelle à multiple entre le modèle & Metal. Vous pouvez faire cela comme cela dans la fonction OnModelCreating de DbContext.

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany(); 
} 
1

La réponse de Steven K est correct pour enlever l'entrée de clé étrangère sur la table en métal, mais il ne fera pas appliquer exigence unique pour le champ Desctiption. Ce n'est cependant pas sa faute car, malheureusement, EF Code First n'a pas encore d'annotation de contrainte unique.

Questions connexes