0

ソフトウェアを複数のユーザーが使用できるようにしたいので、コンテキストを可能な限り部分的に使用しようとしていますが、コンテキストの統合にすでに問題があります...したがって、私が行っているのは、次のようなコンテキストを呼び出すことです。

entityManager = new EntityManager();

IEnumerable<customers_question_set> customersQuestionSets = 
entityManager.GetTradersCustomersQuestionSets(trader.id).ToArray<customers_question_set>();

entityManager = null;

このように、私はすべてを= nullで閉じるだけでなく、.ToArray()によってコンテキストからオブジェクトを切り離すと信じています。

しかし今、データベースに新しいアイテムを追加しようとしていますが、問題が発生しました。これが私の行動です:

private void button1_Click(object sender, EventArgs e)
    {
        trader trader = new trader();
        trader.companies.Add(parent.GetCompany());
        trader.login = textBox1.Text;
        trader.password_hash = Hasher.ToSha256Hash(textBox2.Text);

        EntityManager entityManager = new EntityManager();
        entityManager.SaveTrader(trader);
        entityManager = null;

        this.RefreshLists();
    }

public class EntityManager
{

    private mentor11Entities Mentor11Entities = new mentor11Entities();

    private mentor11Entities GetMentor11()
    {
        return this.Mentor11Entities;
    }

    public void SaveTrader(trader trader)
    {
        GetMentor11().traders.AddObject(trader);
        GetMentor11().AcceptAllChanges();
        GetMentor11().SaveChanges();
    }

[...]

}

エラーはGetMentor11()。traders.AddObject(trader)で発生します-それがどこからも取得しなかった新しいメンバーである場合、それをデタッチする方法は?

4

1 に答える 1

0

多くの人がこれに問題を抱えており、インターネットには (私のように初心者向けの) 簡単な説明がありません。問題を解決する方法を共有します。

  1. 結局、EntityManager を static にしました。

  2. 「StoreWins」更新タイプを発見しました(出力が常にサーバーと同じであることを確認しています)

したがって、次のようになり、正常に動作します。

public static void SaveTrader(trader trader)
    {
        Mentor11Entities.Refresh(System.Data.Objects.RefreshMode.StoreWins, Mentor11Entities.traders);
        GetMentor11().AddTotraders(trader);
        GetMentor11().SaveChanges();
        GetMentor11().AcceptAllChanges();
        Mentor11Entities.Refresh(System.Data.Objects.RefreshMode.StoreWins, Mentor11Entities.traders);
    }
于 2012-07-16T23:25:49.927 に答える