2017-02-12 4 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 (но Entity Framework будет вставлять новые повторяющиеся строки в 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 -relationship-checkboxes –

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

EDIT Опубликовать

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

i update question – MrMVC