我使用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 –