2011-02-28 3 views
0

일대 다 매핑을 만들려고하지만 업데이트를 저장하는 데 어려움이 있습니다.
메뉴는 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

나는이 같은 업데이트를 만들려고 노력 해요 : 메뉴 테이블에서의 moduleID가 변경되지 않습니다

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

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

합니다. 무엇이 잘못 되었나요?


내 모델 :

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

내가 메뉴 클래스에의 moduleID를 추가했다 나의 매핑 작업을 얻으려면,하지만 난이 매핑 할 수 있습니다 다른?

Edit:

I'm using MySQL

메뉴 테이블 :
INT menuId와
VARCHAR 제목
INT의 moduleID

모듈 테이블 :
INT의 moduleID
VARCHAR 두 번째 예에서

답변

0

마지막으로 알아 냈습니다. 그것은 어리석은 멍청한 놈 오류였습니다 :

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 프로파일 러를 연결하여 두 번째 예제에서 실행중인 명령을 확인하십시오 .SaveChanges()?

+0

나는 .SaveChanges()가 누락되었습니다. 죄송합니다, 나는 SQL 프로파일 러를 사용할 수 없으므로 MySQL을 사용하고 있음을 언급하는 것을 잊어 버렸습니다. ( – Frets

+0

더 많은 조사가 끝나면 모듈이 부착 된 메뉴 객체를 저장하려고하면 아무것도 업데이트되지 않습니다. 하지만 모듈을 부착하지 않고 메뉴 객체를 저장하면 모든 것이 db에서 업데이트됩니다. – Frets

관련 문제