Ce que vous obtenez est le comportement par défaut de l'EF Code d'Abord en termes d'une cartographie de 1 à Plusieurs association de la base de données.
Par exemple, vous avez un ICollection<File>
sur la classe Personne, comme un résultat, EF créer un FK sur la table de Fichiers (PersonId) et de l'associer à l'Id de PK sur la table de Personnes.
Maintenant, je suppose que vous avez une beaucoup beaucoup de relation entre le Fichier et la Personne, de sorte que chaque fichier peut s'appliquer à de nombreuses Personnes et chaque Personne peut avoir beaucoup de fichiers (même histoire pour objet d'Événement ainsi). Une façon d'y parvenir est de mettre les propriétés de navigation sur le Fichier de classe, pointant à l'Événement et classes de la Personne. Donc, votre modèle doit être changé à cela:
public class File {
public int Id { get; set; }
public string Path { get; set; }
public virtual ICollection<Event> Events { get; set; }
public virtual ICollection<Person> Persons { get; set; }
}
public class Event {
public int Id { get; set; }
public string EventName { get; set; }
public virtual ICollection<File> Files {get;set;}
}
public class Person {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<File> Files { get; set; }
}
public class MyContext : DbContext {
public DbSet<Person> Persons { get; set; }
public DbSet<Event> Events { get; set; }
public DbSet<File> Files { get; set; }
}
En conséquence, EF lien créer des tables (Events_Files et Files_Persons) à la carte de ces nombreuses de nombreuses associations à la base de données.
Mise à jour:
Lors de l'utilisation de POCOs avec EF, si vous marquez votre navigation propriétés virtuel , vous opterez-à-uns des EF prend en charge comme le Chargement Paresseux et Relation de Correction. Donc, en général, ont un mot clé virtual dans les propriétés de navigation considéré comme une bonne pratique.