2011-08-02 4 views
0

MVC3 & EF4를 사용하여 외래 키 관계가있는 엔티티를 저장할 때 약간의 문제가 발생합니다..NET EF4 엔티티 복제시 저장

public void CreateMenuItem(MenuItem menuItem) 
{ 
    MissChuDataContext.MenuItems.Add(menuItem); 
    MissChuDataContext.SaveChanges(); 
} 

내 데이터베이스 매핑은 다음과 같습니다 :

modelBuilder.Entity<MenuItem>().HasRequired(x => x.MenuItemCategory).WithMany().HasForeignKey(x => x.MenuItemCategoryID); 

여기에 그럼 난 메뉴 아이템을 절약 내 저장소에이 방법이 내 (공간을 절약하기 위해 단축) 모델

public class MenuItem 
{ 
    /// <summary> 
    /// The ID 
    /// </summary> 
    [Key] 
    public int MenuItemID { get; set; } 

    /// <summary> 
    /// Foreign key to menu item category 
    /// </summary> 
    public int MenuItemCategoryID { get; set; } 

    /// <summary> 
    /// The item category 
    /// </summary> 
    public MenuItemCategory MenuItemCategory { get; set; } 
} 

public class MenuItemCategory 
{ 
    /// <summary> 
    /// The ID 
    /// </summary> 
    [Key] 
    public int MenuItemCategoryID { get; set; } 

    /// <summary> 
    /// The name 
    /// </summary> 
    [Required] 
    [DataType(DataType.Text), StringLength(128)] 
    public string Name { get; set; } 
} 

입니다

그러나 어떤 이유로 repo 메서드는 새 M을 저장할 때 중복 된 MenuItemCategory 엔터티를 만듭니다. 기존 MenuItemCategory와 관련된 enuItem입니다. 그러나 내가 뭔가를 누락 확신이 작동하고 중복 MenuItemCategory을 만들지 않습니다

[HttpPost] 
public ActionResult CreateMenuItem(MenuItem menuItem) 
{ 
    menuItem.MenuItemCategory = MenuItemRepository.GetMenuItemCategoryByID(menuItem.MenuItemCategory.MenuItemCategoryID); 
    MenuItemRepository.CreateMenuItem(menuItem); 

    return View(); 
} 

:

가 나는 컨트롤러 컨텍스트에서 MenuItemCategory를 재 할당하여 작업 얻을 관리해야 간단합니다. 중복을 막을 수 있고, 컨트롤러에서 menuItem.MenuItemCategory = ... 호출을 사용하지 않아도됩니다.

public void CreateMenuItem(MenuItem menuItem) 
{ 
    MissChuDataContext.MenuItems.Add(menuItem); 
    MissChuDataContext.Entry(menuItem.MenuItemCategory).State = EnttiyState.Unchanged; 
    MissChuDataContext.SaveChanges(); 
} 

문제는 당신이 Add를 호출 할 때 EF는 모든 엔티티를 추가하는 것입니다!

유무는

답변

0

이 시도 사방에 보였지만 지금까지 작동 아무것도 :(

많은 감사를 발견 객체 그래프는 menuItem뿐 아니라 변경하기 전에 동일한 컨텍스트 인스턴스로 컨텍스트에로드하거나로드하지 않을 때 컨텍스트에 추가되거나 추가 된 모든 엔터티의 상태를 수동으로 처리해야합니다.