0

AttachTo以下のように、更新されたオブジェクトをObjectContextにアタッチする汎用CRUDリポジトリがあります。

注意:プロパティentitySetNameは、オブジェクトがアタッチされているテーブルの名前を提供します

    public virtual void Save(TModel t)
    {
            TModel unboxed = (TModel)t;
            db.AttachTo(entitySetName, unboxed);
            db.SaveChanges();
    }

エラーは表示されず、データは保存されません。誰もが理由を見ることができますか?

4

2 に答える 2

2

AttachTostate のコンテキストにエンティティを追加しますUnchangedSaveChangesその直後に呼び出すと、EF の観点からはエンティティが「変更されていない」ため、何も更新されません。

Modifiedプロパティが変更され、データベースに書き込む必要があることを EF に通知するには、状態を に設定する必要があります。

public virtual void Save(TModel t)
{
        TModel unboxed = (TModel)t;
        db.AttachTo(entitySetName, unboxed);
        db.ObjectStateManager.ChangeObjectState(unboxed, EntityState.Modified);
        db.SaveChanges();
}
于 2013-02-11T22:12:17.823 に答える
1

単一の列で変更したいと思います。を試すことができます.Attach

    public virtual void Save(TModel t)
    {
        db.SystemUserLogs.Attach(t);
        //db.Entry(t).State = EntityState.Modified; //<--- For whole fields modifier

        db.Entry(t).Property(x => x.entitySetName).IsModified = true; //<--- For one field modifier
        db.SaveChanges();
    }
于 2013-02-11T23:30:59.807 に答える