2011-02-28 7 views
0

1対多のマッピングを作成しようとしていますが、更新を保存する際にいくつかの問題があります。
メニューは0〜1のモジュールを持つことができます。
モジュールには、0〜複数のメニューがあります。更新時にEF CTP5マッピングが失敗する

新しいメニューオブジェクトを作成して保存すると、モジュールはdbに保存されますが、更新時には表示されません。

これは働いている:

var menu = new Menu() 
menu.Title = "Menu Title"; 
menu.Module = repository.GetModule(2); 

... 
DbContext.SaveChanges() 
... 

は、モジュールへの外部キーでメニュー項目を保存します。
menuID属性:1
はModuleIDは:2

私はこのようなアップデートをしようとしています:

var menu = repository.GetMenu(1); 
menu.Module = repository.GetModule(3); 

Edit: ... DbContext.SaveChanges() ...

ModuleIDはメニュー表では変更されません。 どうしたのですか?


マイモデル:

public class Menu 
{ 
    [Key] 
    public int MenuID { get; set; } 
    public string Title { get; set; } 
    public int ModuleID { get; set; } <-- Is this necessary 

    public virtual Module Module { get; set; } 
} 

public class Module 
{ 
    [Key] 
    public int ModuleID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Menu> Menus { get; set; } 
} 

マッピング:

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Module>().HasMany<Menu>(m => m.Menus).WithOptional().HasForeignKey(m => m.ModuleID); 
} 

私のマッピング作業を取得するには、私は、MenuクラスにModuleIDはを追加する必要がありましたが、私はこれをマッピングすることができます違う?

Edit:

I'm using MySQL

メニュー表:
int型menuID属性
varchar型のタイトル
int型ModuleIDは

モジュールテーブル:
int型ModuleIDは
varcharの2番目の例では

答えて

0

最後に私はそれを理解しました。それは愚かなnoobエラーだった:

public ActionResult Edit(int id, MenuModel menu) 
{ 
    var menuDb = repository.Get(id); 
    TryUpdateModel(menuDb); 

    //repository.save(menu); <-- WRONG! 
    repository.save(menuDb); <-- BINGO... It works! 
} 
1

に名前を付けて、私はあなたが左と仮定.SaveChanges()のコードスニペットから?

クラス構造とマッピングが正しいように見えます。SQLプロファイラを使用して、2番目の例の.SaveChanges()で実行されているコマンドを確認しましたか?

+0

私は行方不明の.SaveChanges()を追加しました。申し訳ありませんが、私はSQLプロファイラを使用することはできませんので、私はMySQLを使用していることを忘れていた:( – Frets

+0

私はモジュールを添付してメニューオブジェクトを保存しようとすると、しかし、モジュールを接続せずにメニューオブジェクトを保存すると、すべてがdb内で更新されます。 – Frets

関連する問題