2017-02-12 38 views
1

我有3個表:多對多代碼先插入新記錄

  • 廣告
  • AdsCategory
  • AdsAdsCategory

當我嘗試添加新廣告,新的廣告插入廣告表並將新的AdsAdsCategory插入到AdsAdsCategory中,但將新記錄插入到AdsCategory中

如何解決此問題?

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

     public string Name { get; set; } 

     public virtual ICollection<AdsCategory> AdsCategories { get; set; } 
} 

public class AdsCategory 
{ 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<Ads> Ads { get; set; } 
} 

我想插入數據只是到廣告和AdsAdsCategory(但實體框架將在AdsCategory插入新的重複行)

插入方法:

public async Task<IHttpActionResult> PostAds(Ads ads) 
{ 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.Adses.Add(ads); 

      int result = await db.SaveChangesAsync(); 

      if (result > 0) 
      { 
       return Ok(result); 
      } 

      return InternalServerError(); 
} 
+0

可能重複的:http://stackoverflow.com/questions/9152404/crud-views-for-many-many - 關係複選框 –

+0

https://msdn.microsoft.com/en-us/magazine/dn166926.aspx –

回答

0

你真的應該把它映射到一個新的表使用Fluent API

public class Ads 
{ 
    public Ads() 
    { 
     AdsCategories= new HashSet<AdsCategory>(); 
    } 
    public int AdsId { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<AdsCategory> AdsCategories { get; set; } 
} 


public class AdsCategory 
{ 
    public AdsCategory() 
    { 
     Ads= new HashSet<Ads>(); 
    } 
    public int AdsCategoryId { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Ads> Ads { get; set; } 
} 

然後在你的db上下文文件中,使用t他OnModelCreating將它們映射到一個新的表

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
     modelBuilder.Entity<Ads>(). 
      HasMany(c => c.AdsCategories). 
      WithMany(p => p.Ads). 
      Map(
       m => 
       { 
        m.MapLeftKey("AdsId"); 
        m.MapRightKey("AdsCategoryId"); 
        m.ToTable("Whateveryoucallyourtable"); 
       }); 
} 

編輯 後

public async Task<IHttpActionResult> PostAds(Ads ads, AdsCategory adsCategory) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     Ads.AdsCategories.Add(adsCategory); 
     AdsCategory.Ads.Add(ads) 

     int result = await db.SaveChangesAsync(); 

     if (result > 0) 
     { 
      return Ok(result); 
     } 

     return InternalServerError(); 
    } 
+0

,謝謝你的回答,我嘗試了這種方法,但是我遇到了同樣的問題 – MrMVC

+0

我可以看到你正在更新的代碼新表? – scottdavidwalker

+0

我更新問題 – MrMVC