私は EF 5 と Code First を使用しています。
Translation プロパティを公開するメインの ViewModel があります。Translation は、1 ~ n 個の Translation Items から構成されます。Translation プロパティは Usercontrol にバインドされています。Translation が作成され、Viewmodel で _context.Translations.Add(t) を介して追加されると、Translation 内のすべての TranslationItems も保存され、DB に正しく格納されます。
しかし、新しい TranslationItem (t.TranslationItems.Add) を既存の Translation に追加しようとすると、DB に保存されません。context.ObjectStateManager.GetObjectStateEntries(EntityState.Added) も要素を返さないので、新しい翻訳項目がまだ添付されていないと思います。TranslationItem は Child Usercontrol 内に追加されるため、現在の Datacontext にアクセスできません。Entity State を 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 コンストラクターでコンテキストを作成し、それをリポジトリ クラスに渡します。