come aggiungere chiavi esterne in EF 7 alfa

entity-framework-core

Domanda

Come posso creare una relazione uno a uno in EF 7 alpha3?

Il vecchio modo di definire solo le proprietà di navigazione non funziona e ModelBuilder non ha i metodi HasRequired / HasOptional utilizzati in precedenza.

Qualcuno può far luce su questo?

Risposta accettata

Fino a poco tempo fa, non esistevano API di builder di modelli per la definizione delle relazioni. Invece, devi manipolare l'oggetto modelBuilder.Model sottostante. Ecco un esempio di una relazione uno-a-molti.

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));
    }
}

Puoi leggere di più sulla nostra attuale (a partire dal 2014-07-31) pensando a come saranno queste API . Il risultato finale sarebbe simile al seguente.

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

Risposta popolare

Con EF7 beta7, vengono introdotti nuovi set di metodi per la definizione delle relazioni tra entità.

Per uno a molti rapporti,

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

Con, .Reference(typeof(Blog), "Blog") relazione da Entity Post a Blog è configurato. Il primo argomento è il tipo di entità che Post target e second arguament è il nome della proprietà di navigazione.

Con, .InverseCollection("Posts") , viene configurata una relazione uno a molti. Arguado a questa funzione è il nome della raccolta di navigazione.

Con, .ForeignKey(new string[] { "BlogId" }) , la chiave esterna è configurata. Se questa chiave esterna non è impostata, la chiave esterna shadow viene automaticamente generata per te.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché