再次使用多个IEntityChangeTracker接口实例

时间:2012-07-16 22:30:04

标签: c# mysql winforms entity-framework

我正在尝试尽可能地使用上下文,因为我希望我的软件被多个用户使用,而且我已经遇到了上下文集成的问题......所以我正在做的是调用上下文:< / p>

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) - 如果它是一个我从未在任何地方拿过的新成员,如何分离它?

1 个答案:

答案 0 :(得分:0)

由于有很多人对此有疑问,并且在互联网上没有简单的(对我来说是初学者)我能找到的解释......我将分享如何解决我的问题。

  1. 毕竟我已经将EntityManager设为静态。

  2. 我发现“StoreWins”刷新类型(确保输出始终与服务器一样)

  3. 所以它看起来像这样并且工作正常:

    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);
        }