2012-03-31 7 views
4

Ich habe ein Modell Produkt mit einer 1: n-Beziehung zum Modell Product_Tag. Ich habe auch ein Modell Tag hat eine 1: n Beziehung mit Product_Tag.MVC3 DbContext Erhalten Sie die ID des neuen Modells nach dem Speichern?

Beim Speichern eines neuen Produkts möchte ich in der Lage sein, Verknüpfungen zu Tags in Product_Tags zu speichern. Product_Tag benötigt eine PRoductID und eine TagID. Ich habe die Tag-IDs zum Zeitpunkt der Speicherung verfügbar, aber die ProductID kommt von dem neu erstellten Produkt. Wie erhalte ich die ID des neu erstellten Produkts unmittelbar nach dem Speichern des neuen Produkts?

Alternativ gibt es eine Möglichkeit, das Produktmodell mit seinen ProductTags nur mit TagIDs zu speichern und DbContext zu erhalten, um die ProductID für mich auszufüllen?

Antwort

8

Wenn Sie der Datenbank eine neue Entität hinzufügen, wird ihre ID automatisch von Entity Framework aufgefüllt. Du kannst es benutzen.

using (var context = new MyDbContext()) 
{ 
    var product = new Product(); 
    product.Name = "My product"; 

    context.Products.Add(product); 
    context.SubmitChanges(); 

    var productId = product.ID; // here you can get ID of added product 
} 

Auch kann EF arbeiten mit 'many-to-many' Beziehungen, und Sie brauchen nicht für sich selbst Beziehung zusätzliche Klasse zu erstellen. Wenn Sie Code verwenden zuerst, können Sie diese Zuordnung verwenden:

public class Product 
{ 
    int ID {get;set;} 
    public virtual ICollection<Tag> Tags {get;set;} 
} 

public class Tag 
{ 
    int ID {get;set;} 
    public virtual ICollection<Product> Products {get;set;} 
} 

// In your DbContext class: 
protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Product>().HasMany(x => x.Tags).WithMany(x => x.Products) 
     .Map(m => 
     { 
      m.ToTable("Product_Tag"); // Relationship table name 
      m.MapLeftKey("ProductID"); // Name of column for product IDs 
      m.MapRightKey("TagID"); // Name of column for tag IDs 
     }); 
} 

Dann können Sie etwas tun:

using (var context = new MyDbContext()) 
    { 
     var product = new Product(); 
     product.Name = "My product"; 
     product.Tags.Add(new Tag {Name = "furniture"}); 
     product.Tags.Add(new Tag {Name = "food"}); 

     context.Products.Add(product); 
     context.SubmitChanges(); 
    } 

In diesem Fall EF automatisch ein neues Produkt erstellt, zwei Tags und zwei Beziehungen zwischen erstelltem Produkt und Tags

+0

Schön! Das ist so praktisch, um die neu generierte ID in DbContext verfügbar zu haben. Danke für die Antwort! – ZuluAlphaCharlie

+0

Machen Sie das ein doppeltes Dankeschön! Der zweite Abschnitt über die Verwendung von EF zur Lösung von Viele-zu-Viele ist genau das, wonach ich gesucht habe. – ZuluAlphaCharlie

Verwandte Themen