comment ajouter des clés étrangères dans EF 7 alpha

entity-framework-core

Question

Comment créer une relation un-à-un avec EF 7 alpha3?

L'ancienne méthode de définition des propriétés de navigation ne fonctionnait pas et modelBuilder ne disposait pas des méthodes HasRequired / HasOptional utilisées précédemment.

Quelqu'un peut-il nous éclairer?

Réponse acceptée

Jusqu'à récemment, il n'existait aucune API de création de modèle permettant de définir des relations. Au lieu de cela, vous devez manipuler l'objet modelBuilder.Model sous-jacent. Voici un exemple de relation un à plusieurs.

class Blog
{
    public Blog()
    {
        Posts = new List<Post>();
    }

    public int Id { get; set; }

    public ICollection<Post> Posts { get; set; }
}

class Post
{
    public int Id { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Post>().ForeignKeys(x => x.ForeignKey<Blog>(p => p.BlogId));

        var model = builder.Model;
        var blog = model.GetEntityType(typeof(Blog));
        var post = model.GetEntityType(typeof(Post));
        var fk = post.ForeignKeys.Single(k => k.ReferencedEntityType == blog);
        blog.AddNavigation(new Navigation(fk, "Posts", pointsToPrincipal: false));
        post.AddNavigation(new Navigation(fk, "Blog", pointsToPrincipal: true));
    }
}

Vous pouvez en savoir plus sur notre pensée actuelle (à compter du 2014-07-31) sur l'apparence de ces API . Le résultat final ressemblerait à ce qui suit.

modelBuilder.Entity<Blog>()
    .OneToMany(b => b.Posts, p => p.Blog).ForeignKey(b => b.BlogId);

Réponse populaire

Avec EF7 beta7, un nouvel ensemble de méthodes est introduit pour définir les relations entre les entités.

Pour une relation un à plusieurs,

modelBuilder.Entity<Post>()
   .Reference(typeof(Blog), "Blog")
   .InverseCollection("Posts")
   .ForeignKey(new string[] { "BlogId" });

Avec, la .Reference(typeof(Blog), "Blog") d’entité Post à Blog est configurée. Le premier argument est le type de l'entité que la cible publie et le second argument est le nom de la propriété de navigation.

Avec .InverseCollection("Posts") , une relation de un à plusieurs est configurée. L'argument de cette fonction est le nom de la collection de navigation.

Avec .ForeignKey(new string[] { "BlogId" }) , la clé étrangère est configurée. Si cette clé étrangère n'est pas définie, une clé étrangère shadow est automatiquement générée pour vous.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi