1

EF Framework 4.0 での SqlDependencies の使用に関するフィードバックをお待ちしています。私は現在、ObjectQuery を toStraceString() と組み合わせて使用​​して SqlDependency を生成するシナリオを実装しています。ストアの更新を行うと、Entity Framework ソース コードのどこかで 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