0

これは私の質問を示すためのテスト プロジェクトです。(VS2012、WinForms、EntityFramework 5、XtraGrid 12.5)

EF PowerTools - リバース エンジニアリング CodeFirst ツールによって作成されたモデル。

timer1_tick イベントで、mypoco.value プロパティを変更しています。grid.cell がこの変更を自動的に表示することを期待していますが、そうではありません。テキストボックスも試しましたが同じでした。

BindingSource.ResetCurrentItem()timer1_tick でコメントを外すと期待どおりに動作しますが、これは私の質問ではありません。グリッド(またはテキストボックス)を強制的に更新すると、すべて問題ありません。

ef 作成されたプロキシ オブジェクトが DbSet.Local (ObservableCollection) -> BindingList -> BindingSource -> Grid などに通知することを期待しています。働く?または、動作していますが、私の期待は間違っていますか? (

なぜこれが期待どおりに機能しないのですか?どこで失敗していますか? コード内の注意事項もお読みください。

ありがとうございました。

//FORM CODE    
public partial class Form1 : Form
{

    testContext context = new testContext();
    MyPOCO mypoco;


    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        mypoco = context.MyPOCOes.Create();
        // mypoco is created but not proxied currently. state = detached

        // After adding it context proxy created and change tacking will be available
        context.MyPOCOes.Add(mypoco);

        // mypoco is in the memory but not saved to database. This is why using Local 
        myPOCOBindingSource.DataSource = context.MyPOCOes.Local.ToBindingList();

        // Setup timer
        timer1.Interval = 15 * 1000;
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        // Change the property and then warn user about this event occured 
        // At this point mypoco is proxied
        mypoco.Value = 99;
        this.Text = "Timer Tick";

        //myPOCOBindingSource.ResetCurrentItem();

    }

}

// some code from Form1.Designer file
private System.Windows.Forms.BindingSource myPOCOBindingSource;

private void InitializeComponent()
{
   this.myPOCOBindingSource = new System.Windows.Forms.BindingSource();
   ....
   this.myPOCOGridControl.DataSource = this.myPOCOBindingSource;
}




//MYPOCO
public partial class MyPOCO
{
    public int ID { get; set; }
    public Nullable<int> Value { get; set; }
}


//MAPPING
public class MyPOCOMap : EntityTypeConfiguration<MyPOCO>
{
    public MyPOCOMap()
    {
        // Primary Key
        this.HasKey(t => t.ID);

        // Table & Column Mappings
        this.ToTable("MyPOCO");
        this.Property(t => t.ID).HasColumnName("ID");
        this.Property(t => t.Value).HasColumnName("Value");
    }
}


//CONTEXT
public partial class testContext : DbContext
{
    static testContext()
    {
        Database.SetInitializer<testContext>(null);
    }

    public testContext()
        : base("Name=testContext")
    {
    }

    public DbSet<MyPOCO> MyPOCOes { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new MyPOCOMap());
    }
}
4

1 に答える 1