2012-10-15 1 views
1

EF 5와 코드 우선을 사용합니다.엔티티 프레임 워크 - 첨부되지 않은 항목 자동 추가

필자는 번역 속성을 노출하는 기본 ViewModel을 가지고 있습니다. 번역은 1 ~ n 개의 번역 항목으로 구성됩니다. 번역 속성은 Usercontrol에 바인딩됩니다. Translation이 생성되고 Viewmodel의 _context.Translations.Add (t)를 통해 추가 될 때 Translation의 모든 TranslationItem도 저장되고 DB에 올바르게 저장됩니다.

하지만 기존 번역에 새 TranslationItem (t.TranslationItems.Add)을 추가하려고하면 DB에 저장되지 않습니다. context.ObjectStateManager.GetObjectStateEntries (EntityState.Added)도 요소를 반환하지 않으므로 새 번역 항목이 아직 연결되어 있지 않은 것 같습니다. TranslationItem은 Child Usercontrol 안에 추가 되었기 때문에 Entity State를 Added로 설정하기 위해 현재 Datacontext에 액세스 할 수 없습니다.

어떻게해야합니까?

편집 : 뷰 모델에서

public class Translation : BaseEntity, IValidatableObject 
{ 

    private List<TranslationItem> _translations; 
     public virtual List<TranslationItem> Translations 
    { 
     get{ 
      return _translations; 
     } 
     set 
     { 
      _translations = value; 

     } 
    }s 

:

Translation = new Translation(); or 

Translation = repo.GetTranslation(1); 

사용자의 UserControl에 바인딩 :

<Views:TranslationTextInput Translations="{Binding Translation}"/> 

을 코드에서 해당 UserControl의 뒤에 :

   Trans.Translations.Add(new TranslationItem() { Text = "", Lcid = new CultureInfo("en").LCID }); 

저장 기능 :

public void Update(Translation t) 
    { 
     if (t.Id == 0) 
      _context.Units.Add(t); 
     _context.SaveChanges(); 
    } 

나는 뷰 모델 생성자의 컨텍스트를 만들고 저장소 클래스에 전달합니다.

+0

TranslationItem을 번역에 추가하는 데 사용할 코드를 게시 할 수 있습니까? 문제의 근원은 번역 자체가 연결되어 있지 않다는 것입니다. 번역은 어떻게 작성하고 있습니까? 당신이 원한다면 언제든지 번역을 붙이는 것으로 시작할 것입니다. –

+0

의견을 보내 주셔서 감사합니다, 제 편집을 참조하십시오. – TheJoeIaut

+0

다음과 같은 경우 코드가 작동합니까? Translation = repo.GetTranslation (1); 컨텍스트에서 기존 번역을 얻고 있기 때문에? 그렇다면 viewmodel에서 번역을 만들 때 컨텍스트에 번역본을 첨부하거나 한 번에 작성하고 첨부 할 repo.CreateTranslation을 만듭니다. –

답변

1

Translation이 올바르게 부착 된 경우 ChangeTracker 이 자동으로 어린이를 데려 와야합니다. 그러나 Translation이 컨텍스트에 첨부되어 있다고 확신하는 경우 TranslationItems을 모두 Translation 안에 첨부 할 수 있습니다.

TranslationItemsDbSet 이름이 확실하지 않습니다. 사용자 이름을 변경하십시오.

public void Update(Translation t) 
{ 
    if (t.Id == 0) 
     _context.Units.Add(t); 

    foreach (var ti in t.Translations) 
    { 
     if (_context.Entry(ti).State == EntityState.Detached) 
     { 
      _context.TranslationItems.Attach(ti); 
     } 
    } 

    _context.SaveChanges(); 
} 
+0

큰 도움을 주셔서 감사합니다. 지금 작동하게하십시오! – TheJoeIaut

관련 문제