2012-02-04 43 views
0

要將NHibernate的類綁定到我做一個DataGridView:NHibernate的綁定到DataGridView中,插入不起作用

IList<DatabaseAccess.poco.Employee> employees = 
       (from e in session.Linq<DatabaseAccess.poco.Employee>() select e).ToList<DatabaseAccess.poco.Employee>(); 

this.employeeBindingSource.DataSource = employees; 

當我承諾,只有行已經在數據庫中存在的變化被髮送,使用網格創建一個新行不起作用。

那麼,我可以期待將一個列表綁定到DataSource就足夠了,我不必創建Employee對象並執行session.Save(new_employee);?或者是必須的?

我還沒有找到任何教程來描述完整的DataGridView綁定,並創建新的行。

回答

0

在page_load方法中,您的數據網格是否綁定在IsPostBack中。

這樣的:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //Grid Bind 
     } 
    } 
+0

我不使用Asp.Net。首先,只需Winforms – userbb 2012-02-04 16:30:41

+0

,您必須確認插入操作的工作。如果插入不行。是你的session.Save(new_employee)方法添加事務屬性?像這樣[Transaction(TransactionMode.Requires)] – javan 2012-02-04 16:56:56

+0

只能在網格中插入。我可以添加新記錄,但是在提交後沒有任何內容被髮送到數據庫。更新作品。 – userbb 2012-02-04 17:03:38

1

這是必須的。 DataGridView沒有關於NH的知識,NH不知道DataGridView添加了一個新行。所以你必須在UserAddedRow事件處理程序中保存新的實體。

using (ITransaction tx = session.BeginTransaction()) 
{ 
    session.Save(albumBindingSource.Current); 
    tx.Commit(); 
} 
+0

好吧,我明白了。但爲什麼更新有效? – userbb 2012-02-04 18:22:07

+0

在關閉會話之前,NH會跟蹤每個檢索到會話緩存實體的會話。當您調用ITransaction.Commit()NH更新所有修改的實體時。 – hival 2012-02-04 18:32:08

+0

提交後,我得到:行被更新或被另一個事務刪除(或未保存的值映射不正確)。 – userbb 2012-02-04 20:11:51