我使用 EF 5 和 Code First。
我有一个主要的 ViewModel,它公开了一个翻译属性。翻译由 1 到 n 个翻译项组成。Translation 属性绑定到用户控件。当通过 Viewmodel 中的 _context.Translations.Add(t) 创建和添加翻译时,翻译中的所有 TranslationItems 也会正确保存并存储在数据库中。
但是,当我尝试将新的 TranslationItem (t.TranslationItems.Add) 添加到现有翻译时,它不会保存在数据库中。context.ObjectStateManager.GetObjectStateEntries(EntityState.Added) 也没有返回任何元素,所以我猜新的翻译项仍然没有附加。由于 TranslationItem 添加在子用户控件中,因此我无法访问当前的 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);
绑定到自定义用户控件:
<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 构造函数中创建上下文并将其传递给存储库类。