2016-07-12 14 views
1

私は新しいNewsアイテムを作成するとき、私は、3つのテーブルEntity Frameworkの中に多対多の関係

  • ニュース
  • NewsCategory
  • カテゴリー

enter image description here

を持っていますその新しい項目にカテゴリを割り当てる必要があります。

私のコードはNewsToSave対象に選択したカテゴリを割り当てるには、どのように

var NewsToSave = new News(); 
NewsToSave.NewsBody = model.NewsBody; 
NewsToSave.NewsTitle = model.NewsTitle; 
NewsToSave.NewsImagePath = NewsImagePath; 
NewsToSave.NewsDate = System.DateTime.Now; 

db.News.Add(NewsToSave); 
db.SaveChanges(); 

foreach (var id in SelectedIDs) 
{ 
    // How to assign selected categories to NewsToSave object and save the Ids in the middle table 
} 

のように見えますか?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     modelBuilder.Entity<NewsToSave>() 
      .HasMany(c => c.Categories).WithMany(i => i.NewsToSaves) 
      .Map(t => t.MapLeftKey("NewsToSaveID") 
       .MapRightKey("CategoryID") 
       .ToTable("NewsCategory")); 
    } 

て、コメントを追加し、データを処理:

は、あなたがこの方法あなたのコンテキストをオーバーライドすることができ、あなたに

+0

フレームワークの2つのテーブルだけがナビゲーションプロパティで表示されます。マッピングテーブルはEF –

+0

によって管理されますあなたのお手伝い...どうか私の問題を解決するのに手伝ってください。 – Lucy

+0

選択したIDのすべてのカテゴリベースを取得し、次に 'NewsToSave.Categories = categories;'を実行します。あなたがマッピングを正しく行ったと仮定すると(多くの場合、多くの場合)、EFは3番目のテーブルを作成します –

答えて

0

ありがとう

void AddOrUpdateNews(Context context, int categoryId, string newsTitle) 
    { 
     var cat = context.Categories.SingleOrDefault(c => c.Id == categoryId); 
     var nws = cat.News.SingleOrDefault(n => n.Title == newsTitle); 
     if(nws == null) 
     { 
      cat.News.Add(context.News.SingleOrDefault(c => c.Title == newsTitle)); 
     } 
    } 

これは私が作ったASP.NETアプリケーション上で素晴らしい仕事しました数ヶ月前。それがあなたを助けることを願っています。

+0

彼はあなたのソウルティオンが他の側から来たニュースにカテゴリを追加したいと思っています –

+0

@BassamAlugili私は彼が必要と仮定しています彼の* to *関係のための両方の方法。 otherwishは 'cat'クエリを実際のカテゴリで置き換えます。 – Augure

0

あなたが(それはすでにDBに存在していることを提供する)、それを添付し、各IDのカテゴリを作成し、ニュースのCategoriesリストに追加して保存することができます:

エンティティで
foreach(var id in SelectedIDs) 
{ 
    var category = new Category { CategoryId == id}; 
    db.Categories.Attach(category); 
    NewsToSave.Add(category); 
} 

db.News.Add(NewsToSave); 
db.SaveChanges(); 
+0

マッピングを行い、新しいカテゴリを作成しないようにしたい –

0
foreach (var id in SelectedIDs) 
{  
// You have to load the category from Db 
var cat = db.Categories.FirstOrDefault(x=> c.Id == id); 

// Added to the NewsToSave 
if (cat !=null) 
    NewsToSave.Categories.Add(cat); 
} 

// Store the changes 
db.SaveChanges(); 
+0

助けていただきありがとうございます。機能しません。エラーが発生します 追加情報:DefiningQueryと要素がないため、EntitySet 'NewsCategory'を更新できません現在の操作をサポートする要素に存在します。 – Lucy

+0

@ルーシーDbContextにDbSet ニュースがありますか? –

+0

@LucyあなたのエンティティとDbContextを書いてくださいこれはあなたが必要とするものを非常に基本的なものにしています。 –

関連する問題