Entity Framework Code Première installation plusieurs à plusieurs pour les tables existantes
J'ai les tableaux suivants Essence
EssenseSet
et Essense2EssenceSet
Essense2EssenceSet
est la table de liaison qui crée de la M:M relation.
J'ai été incapable d'obtenir le M:M relation de travail si en EF code mais d'abord.
Voici mon code:
[Table("Essence", Schema = "Com")]
public class Essence
{
public int EssenceID { get; set; }
public string Name { get; set; }
public int EssenceTypeID { get; set; }
public string DescLong { get; set; }
public string DescShort { get; set; }
public virtual ICollection<EssenceSet> EssenceSets { get; set; }
public virtual EssenceType EssenceType { get; set; }
}
[Table("EssenceSet", Schema = "Com")]
public class EssenceSet
{
public int EssenceSetID { get; set; }
public int EssenceMakerID { get; set; }
public string Name { get; set; }
public string DescLong { get; set; }
public string DescShort { get; set; }
public virtual ICollection<Essence> Essences { get; set; }
}
[Table("Essence2EssenceSet", Schema = "Com")]
public class Essence2EssenceSet
{
//(PK /FK)
[Key] [Column(Order = 0)] [ForeignKey("Essence")] public int EssenceID { get; set; }
[Key] [Column(Order = 1)] [ForeignKey("EssenceSet")] public int EssenceSetID { get; set; }
//Navigation
public virtual Essence Essence { get; set; }
public virtual EssenceSet EssenceSet { get; set; }
}
public class EssenceContext : DbContext
{
public DbSet<Essence> Essences { get; set; }
public DbSet<EssenceSet> EssenceSets { get; set; }
public DbSet<Essence2EssenceSet> Essence2EssenceSets { get; set; }
protected override void OnModelCreating(DbModelBuilder mb)
{
mb.Entity<Essence>()
.HasMany(e => e.EssenceSets)
.WithMany(set => set.Essences)
.Map(mc =>
{
mc.ToTable("Essence2EssenceSet");
mc.MapLeftKey("EssenceID");
mc.MapRightKey("EssenceSetID");
});
}
}
C'est le code que j'essaie de l'exécuter:
Essence e = new Essence();
e.EssenceTypeID = (int)(double)dr[1];
e.Name = dr[2].ToString();
e.DescLong = dr[3].ToString();
//Get Essence Set
int setID = (int)(double)dr[0];
var set = ctx.EssenceSets.Find(setID);
e.EssenceSets = new HashSet<EssenceSet>();
e.EssenceSets.Add(set);
ctx.Essences.Add(e);
ctx.SaveChanges();
Et voici l'erreur:
Une erreur s'est produite pendant la sauvegarde des entités qui ne sont pas exposer les propriétés de clés étrangères pour leurs relations. Le EntityEntries propriété renvoie la valeur null, car une seule entité ne peut pas être identifié comme la source de l'exception.
Je ne suis pas capable de trouver le problème. Je serais grandement apprécier aider à cette mise en place droite.
Merci!
source d'informationauteur user169867
Vous devez vous connecter pour publier un commentaire.
Supprimer votre
Essence2EssenceSet
table. Si la jonction de la table contient uniquement des clés des entités liées à participer à plusieurs-à-plusieurs relations, il n'est pas nécessaire pour le mapper comme entité. Assurez-vous également que votre couramment cartographie de plusieurs-à-plusieurs relations spécifie le schéma de la table: