StackoverflowException при использовании SqlDependencies с Ef Framework - PullRequest
1 голос
/ 28 марта 2012

Я хотел бы получить отзывы об использовании SqlDependencies с EF Framework 4.0.В настоящее время я реализовал сценарий, используя ObjectQuery в сочетании с toStraceString () для генерации SqlDependency.Я получаю StackoverflowException где-то в исходном коде Entity Framework при выполнении обновления магазина выигрывает.Я думал, что эта ошибка будет где-то в моем коде, но я не могу найти ее.Я составил небольшой пример того, что я хочу сделать:

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

}

Я получаю свое StackoverflowException в NotifierOnDataChanged -> Обновить

...