我使用EF 5和Code First。
我有一个主要的ViewModel,它公开了一个翻译属性。翻译由1到n个翻译项目组成。 Translation属性绑定到Usercontrol。在Viewmodel中通过_context.Translations.Add(t)创建和添加翻译时,翻译中的所有TranslationItem都会被保存并正确存储在数据库中。
但是当我尝试将新的TranslationItem(t.TranslationItems.Add)添加到现有的Translation时,它不会保存在DB中。 context.ObjectStateManager.GetObjectStateEntries(EntityState.Added)也没有返回任何元素,所以我猜新翻译项仍然是未附加的。由于在Child Usercontrol中添加了TranslationItem,因此我无法访问当前的Datacontext以将实体状态设置为Added。
我该怎么办?
编辑:
public class Translation : BaseEntity, IValidatableObject
{
private List<TranslationItem> _translations;
public virtual List<TranslationItem> Translations
{
get{
return _translations;
}
set
{
_translations = value;
}
}s
在ViewModel中:
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();
}
我在Viewmodel构造函数中创建Context并将其传递给存储库类。
答案 0 :(得分:1)
如果Translation
已正确附加,则ChangeTracker 应自动抓取所有孩子。但是,如果您确定TranslationItems
附加到上下文,则可以尝试附加Translation
内的所有Translation
。
我不确定DbSet
的{{1}}名称,将其更改为您为其命名的内容。
TranslationItems