2014-01-13 118 views
1

使用c#,net.4.5和2012如何使用Entity Framework從數據庫獲取數據?

我想從數據庫中使用實體框架獲取數據。

起初的想法是使用類似的代碼如下 - 它必須允許添加在的dataGridView刪除和更新條目,並不僅僅是節省使用context.SaveChanges()變更(由ObjectSet方法,如果我沒看錯)

using (LibraryEntities context = new LibraryEntities()) 
{ 
      var query = (from c in context.Book select c).First(); 
      DataGridView dgv = new DataGridView(); 
      dgv.DataSource = context.Book; 
} 

結果 - 例外

直接將數據綁定到一個存儲查詢(DbSet,的DBQuery,DbSqlQuery),不支持......

然後我試着一點點改變的代碼:

using (LibraryEntities context = new LibraryEntities()) 
{ 
    var query = (from c in context.Book select c).First(); 
    DataGridView dgv = new DataGridView(); 
    dgv.DataSource = query; 
} 

但有例外

直接將數據綁定到一個存儲查詢(DbSet,的DBQuery,DbSqlQuery)相同的問題,不支持...

在最後一次嘗試所有轉換爲List()

using (LibraryLib.LibraryEntities context = new LibraryLib.LibraryEntities()) 
{ 
    DataGridView dgv = new DataGridView(); 
    dgv.DataSource = (from c in context.Book select c).ToList(); 
} 

正如我所料,我得到了DataGridView中的所有數據庫條目,但我無法添加,更新和刪除任何條目。

enter image description here

,問題是 - 我怎麼可以改變分貝dataGridView和比DbContext.SaveChanges()

+0

@ElliotTereschuk,SO是英文網站。谷歌提供這個作爲翻譯'嘿。嘗試考慮準備好的例子是不是很瞭解所有' – paqogomez

+0

@paqogomez謝謝,我知道 - 這是因爲罕見的情況下看到烏克蘭人在這裏;) –

+0

@Elliot TereschukПривіт,иосаменечіткоописано? /你好,沒有正確描述的問題? – gbk

回答

2

是它的WinForms保存呢? 如果是,你必須使用BindingSource的鏈接數據

 BindingSource bs = new BindingSource(); 
     bs.DataSource = typeof(Book); // Book is a type of your Entity class 

     db.Book.ToList().ForEach(n => bs.Add(n)); 
     dgv.DataSource = bs; 

現在它的編輯。和 來存儲更改只是調用db.SaveChanges();

您將List分配給DataGrid的方式對WPF有效。那該怎麼遷移?

+0

是的,我使用的WinForms,我想關於wpf,但目前我只是在學習(免費上班)c#。首先嚐試瞭解主要里程碑。你的建議是完美的 - 據我所知,我必須在使用之前爲數據添加一些「緩衝區」。謝謝 – gbk

0

我建議使用具有unitofwork模式的存儲庫模式,這意味着一個存儲庫類,它將處理所有CRUD操作和工作單元類,將所有更改提交到一起。

+0

你能提供任何鏈接獲得一些教程或關於這種模式的附加信息,如果說實話 - 從來沒有聽說過這個 – gbk

+0

肯定會今天發送一些代碼片段 – DeepakKhetwal

+1

http://www.codeproject.com/Articles/37155/實施 - 存儲庫模式 - 實體 - 單元作業 - 創建T4模板 – DeepakKhetwal

相關問題