2012-03-31 2 views
4

모델 Product_Tag와 1 : n 관계의 모델 Product가 있습니다. 또한 모델 태그에는 Product_Tag와 1 : n 관계가 있습니다.MVC3 DbContext 저장 후 새 모델의 ID 가져 오기?

class Product{ 
    int ID {get;set;} 
    public virtual ICollection<Product_Tag> productTag {get;set;} 
} 

class Tag { 
    int ID {get;set;} 
    public virtual ICollection<Product_Tag> productTag {get;set;} 

} 

class Product_Tag { 
    int ID {get;set;} 
    int ProductID{get;set;} 
    int TagID {get;set;} 
    public virtual Product product {get;set;} 
    public virtual Tag tag {get;set;} 
} 

새로운 제품을 저장할 때 Product_Tags의 태그에 연결을 저장할 수 있기를 원합니다. Product_Tag에는 PRoductID와 TagID가 필요합니다. 저장 시간에 TagID를 사용할 수 있지만 ProductID는 새로 생성 된 Product에서옵니다. 신제품을 저장 한 직후 새로 생성 된 제품 ID를 얻는 방법은 무엇입니까?

또는 TagID가있는 productTags로 Product 모델을 저장하고 DbContext를 사용하여 ProductID를 채우는 방법이 있습니까?

답변

8

새 엔터티를 데이터베이스에 추가하면 해당 ID가 Entity Framework에 의해 자동으로 채워집니다. 당신이 그것을 사용할 수 있습니다.

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 
} 

또한, EF는 '다 대다'관계로 작업 할 수 있습니다, 당신은 관계 자체에 대한 추가 클래스를 만들 필요가 없습니다. , EF는 자동으로 새 제품을 만들어이 경우

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

이 개 태그와 두 관계를 : 당신은 이런 식으로 뭔가를 할 수있는, 그런

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

: 당신이 첫 번째 코드를 사용하는 경우, 당신은이 매핑을 사용할 수 있습니다 생성 된 제품과 태그 사이.

+0

니스! 새롭게 생성 된 ID를 DbContext에서 사용할 수 있으므로 매우 편리합니다. 답변 해주셔서 감사합니다! – ZuluAlphaCharlie

+0

두 번 감사드립니다. EF를 사용하여 다 대다를 해결하는 방법에 대한 두 번째 단원은 정확하게 내가 찾고 있던 것입니다. – ZuluAlphaCharlie