を使用し思いのままの取引の排除を利用する必要が二次dataContexts図るためのsqlを挿入、更新-削除?

StackOverflow https://stackoverflow.com/questions/1405846

質問

いリストで開発者チケットデータベース化によLinq To Sql.保存の試みている場合のみ実行されますので、ユーザーの要求、またはと言われれば節約にあります。私の懸念の利用者が変更に2つ以上のチケットを保存しない。

その場合データベースの拒否を変更し、なおもしろいなと思い情報の項目、または他の分野に関するチケットの問題だったのでタイで請に応えるためには、これらの指標を示すことができた。できるようになったん保存の良いデータの記録とその編集が変更にこだわったキューには、SubmitChangesなくなります。

仕組みを構築したバッファリングシステム毎にチケットがに包まれた別のクラスで変更が保存されるバッファではなく直接のlinq to sqlオブジェクトでは、各チケットの変更:

  • 私のような新しいdataContextインスタンス
  • 試み、変更を保存してください個人の行
  • その報告をユーザー毎に一ることに失敗しました。

このコード私の推測はかなりの香りは、少なくとも醜い.

私のツイッターだけのことを示唆しています。いと思いません涙のうね試験のための取引です。

  • ま取引が正しくリセットのすべての変更項目は、すべての項目SaveChangesいう節?その後、私は期待hasChangesする空SaveChangesは何も行いません。
  • がより良い方法を提個々の行の変化におけるコンテンツが相互に連携linq to sql?
  • 私を見落とさないようにSaveChangesの例外が本当に助けてくれるのか、ある分野でその行が有する問題なのか。

そうなることに同意していない可能性がでlinq to sqlや現実の世界は必要ありませんの力の変化が複数台定を決めずに保存しない)ユーザーのチケットまでい決定をしたい場合には保存に変更ではありませんか?

役に立ちましたか?

解決

私は圧延に自分のバッファリングクラスは、ちょっと乱れが作品に確実に節電を記録します。

これは、親クラスのために私のビジネスオブジェクトをラップ周辺のlinqる。

public class BufferedLinqChange
{
    LqGpsDataContext _dataContext;

    internal BufferedLinqChange(LqGpsDataContext dataContext)
    {
        _dataContext = dataContext;
    }

    protected void SetBufferedProperty<T>(string key,Action linqAction
        ,bool linqEqualsValue,Action bufferAction)
    {
        if (linqEqualsValue)
        {
            if (Changes.ContainsKey(key))
                Changes.Remove(key);
        }
        else
        Changes.InsertOrUpdate(key, linqAction); bufferAction();
    }

    protected Dictionary<String, Action> Changes = new Dictionary<string, Action>();

    public int ChangeCount { get { return Changes != null ? Changes.Count : 0; } }
    public bool hasChanges { get { return Changes != null ? Changes.Count > 0 : false; } }

    public void SubmitChanges()
    {
        _dataContext.SubmitChanges();
        if (ChangeCount > 0)
        {
            Changes.ForEach((item) => item.Value.Invoke());
            _dataContext.SubmitChanges();
        }
    }
    public void CancelChanges()
    {
        if (Changes != null)
            Changes.Clear();
    }
}

このサンプルの特性:

#region assetTag


    String _AssetTag;
    public const String STR_assetTag = "assetTag";
    public String assetTag
    {
        get { return (Changes.ContainsKey(STR_assetTag) ? _AssetTag : Asset.assetTag); }
        set
        {
            SetBufferedProperty<String>(STR_assetTag
                , () => Asset.assetTag = value, Asset.assetTag == value, () => _AssetTag = value);
        }
    }
    #endregion
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top