我使用EF 5和Code First。实体框架 - 自动添加未附加项目
我有一个主ViewModel公开翻译属性。翻译由1到n个翻译项目组成。翻译属性绑定到用户控件。通过Viewmodel中的_context.Translations.Add(t)创建翻译并添加时,翻译内部的所有翻译项都将被正确保存并保存在数据库中。
但是,当我尝试添加一个新的TranslationItem(t.TranslationItems.Add)到现有的翻译它不保存在数据库中。 context.ObjectStateManager.GetObjectStateEntries(EntityState.Added)也不返回任何元素,所以我猜新的翻译项目仍然是未连接的。由于TranslationItem是在Child Usercontrol内部添加的,因此我无法访问当前的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}"/>
在用户控件的代码背后:
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();
}
我创建视图模型构造背景,并将其传递到存储库类。
你可以发布你的代码,你正在使用添加TranslationItem翻译?我认为你的问题的根源在于翻译本身并不独立 - 你最近如何创建翻译?如果可以的话,我会从最初创建它时开始附加翻译。 –
感谢您的评论,请参阅我的编辑。 – TheJoeIaut
当你这样做时,你的代码是否工作:Translation = repo.GetTranslation(1);因为你从上下文获得现有翻译?如果是这样,只需在视图模型中创建翻译时将翻译附加到上下文中,或者创建将立即创建并附加的repo.CreateTranslation –