1

我想获得一些关于在 EF Framework 4.0 中使用 SqlDependencies 的反馈。我目前已经实现了一个使用 ObjectQuery 结合 toStraceString() 来生成 SqlDependency 的场景。在刷新商店获胜时,我在实体框架源代码的某处得到了 StackoverflowException。我认为这个错误会出现在我的代码中,但我找不到它。我做了一个我想做的小例子:

public partial class MainWindow : Window
{

    private SqlDependency _sqldep;

    public delegate void DataChanged(string test);
    TestEntities m = new TestEntities();

    SqlCommand _cmd;

    public MainWindow()
    {
        InitializeComponent();

        this.DataContext = this;
        //m.Connection.Open();


        SqlDependency.Start(((System.Data.EntityClient.EntityConnection)m.Connection).StoreConnection.ConnectionString);

        var query = m.User.AsQueryable<User>();

        string query_str = m.User.ToTraceString();
        SqlConnection con = new SqlConnection(((System.Data.EntityClient.EntityConnection)m.Connection).StoreConnection.ConnectionString);

        con.Open();

        SqlCommand cmd = new SqlCommand(query_str, con);

        _cmd = cmd;

        _sqldep = new SqlDependency(cmd);
        _sqldep.OnChange += dependency_OnChange;
        cmd.ExecuteReader();

        this.Users = m.User;
    }

    SqlDependency dependency; 
    // Bei Änderung am gegebenen SQL-Statement
    private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        dependency = (SqlDependency)sender;
        dependency.OnChange -= dependency_OnChange;
        NotifierOnDataChanged(string.Empty);
        dependency.OnChange += dependency_OnChange;
    }

    private void NotifierOnDataChanged(string bla)
    {
        try
        {
            m.Refresh(System.Data.Objects.RefreshMode.StoreWins, m.User);
        }
        catch (System.Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message, "Fehler");

        }
    }


    private IEnumerable<User> _users;

    public IEnumerable<User> Users
    {
        get { return _users; }
        set { _users = value; }
    }

}

我在 NotifierOnDataChanged -> Refresh 处收到 StackoverflowException

4

0 回答 0