ASP.NET 4.0 與 Entity Framework 4-第二篇-使用Entity Framework 進行CRUD操作

來源:互聯網
上載者:User

本文將向你介紹如何使用Entiity Framework對SQL Sever中的資料進行增刪改查(CRUD)操作。文中使用的資料庫是上一篇文章《採用Model-First開發方式建立資料庫》建立的。當然你還需要下載Visual Studio 2010來開啟上一篇文章的專案檔。專案檔的下載連結:點擊下載。

 

步驟1:修改第一篇文章中的資料庫

在第一篇裡,我們使用EF4建立了2個實體。它們分別是UserAccount和Address,每一個實體都有一個名為Id的主鍵和多個欄位。但是在那篇文章中,沒有告訴大家如何將主鍵設定為Identity欄位,設定為Identity欄位的好處是主鍵可以自增。

 

1開啟第一篇文章使用的專案檔。

2.雙擊Solution Explorer的OrderDB.edmx檔案,將會看到Entity Framework設計器。

3.點擊UserAccount的Id欄位,查看它的屬性(Alt+Enter)。

4.將StoreGeneratedPattern的設定為Identity,Address實體做同樣的操作。

5.實體更新了,資料庫也要同步更新。右擊視圖設計器選擇"Generate Database From Model",這個時候VS會提示你是否覆蓋OrderDB.edmx.sql檔案 ,點擊"Yes"。

6.覆蓋後,VS會自動開啟OrderDB.edmx.sql檔案,右鍵快顯功能表中選擇 “Execute SQL”。

這時VS會提示你輸入資料數串連資訊,輸入後點擊“connect”就可以了。

 

步驟2:建立Web表單

下面將在程式中建立一個表單,用來管理UserAccount資料。

1.在專案檔上右鍵,選擇Add->New Item..

2.選擇Web Form模板,將名字改為Users.aspx,點“Add”。

3.在User.aspx的div之間添加如下代碼:

<table>  <tr>    <td>Select A User:</td>    <td><asp:DropDownList runat=server ID="ddlUsers" AutoPostBack="True">        </asp:DropDownList> </td>  </tr>          <tr>    <td>First Name:</td>    <td><asp:TextBox runat="server" ID="txtFirstName"></asp:TextBox></td>  </tr>  <tr>    <td>Last Name:</td>    <td><asp:TextBox runat="server" ID="txtLastName"></asp:TextBox></td>  </tr>  <tr>    <td>Inserted:</td>    <td><asp:Label runat="server" ID="lblInserted"></asp:Label> </td>  </tr>  <tr>    <td>Updated:</td>    <td><asp:Label runat="server" ID="lblUpdated"></asp:Label> </td>  </tr></table>    <asp:Button runat=server ID="btnSave" Text="Save" /><asp:Button ID="btnDelete" runat="server" Text="Delete" />

這裡採用的table的對form進行了簡單的布局。轉到Design視圖你會看到表單的樣子如下:

 

步驟3:將資料載入到Drop Down List中

要完成的是在頁面載入時,將UserAccount的Name和Id資料載入到Drop Down List中。當選擇特定項時,載入更加詳細的資訊。

1.雙擊Degsin視圖(F7),在後台代碼中添加Page_Load 事件。

2.處理Page_Load 事件的代碼如下:

protected void Page_Load(object sender, EventArgs e){    if (!IsPostBack)    {        LoadUserDropDownList();    }}

3.Page_Load方法中的LoadUserDropDownList方法代碼如下:

private void LoadUserDropDownList()        {            using (OrderDBContainer db = new OrderDBContainer())            {                ddlUsers.DataSource = from u in db.UserAccounts                                      orderby u.LastName                                      select new { Name = u.LastName + ", " + u.FirstName, Id = u.Id };                ddlUsers.DataTextField = "Name";                ddlUsers.DataValueField = "Id";                ddlUsers.DataBind();                ddlUsers.Items.Insert(0, new ListItem("Create New User", ""));            }        }

該方法建立了一個OrderDBContainer類的執行個體,這個類在建立OrderDB.edmx自動產生了。它的功能和ADO.NET中的connction類似,我們使用OrderDBContainer串連資料庫,操作資料庫中的對象。這裡的Drop Down List的資料來源是一個Linq查詢。當然,EF將會把它翻譯為SQL 陳述式。Linq就像是SQL倒過來寫,它From語句在前,而SELECT語句在後。本例中,我將所有的UserAccount資料查詢了出來,並且按Last Name排序。同時選擇了Name和Id列,Name是First Name和LastName用逗號拼接而成。

DataTextField屬性設定為Name,DataValueField 設定為Id,這些都是在Linq查詢中建立的。設定完成後,就是綁定了。綁定時,才真正開始調用資料庫查詢的操作。最後給Drop Down List添加一項“Crate New User.”,這項是用來區分更新和添加操作的。

現在資料庫中還沒有任何資料,Drop Down List中只有"Crete New User"一項。如果你開啟了SQL Server Profiler,會看到EF4產生的SQL語句如下:

SELECT [Project1].[Id] AS [Id], [Project1].[C1] AS [C1]FROM ( SELECT       [Extent1].[Id] AS [Id],       [Extent1].[LastName] AS [LastName],       [Extent1].[LastName] + N', ' + [Extent1].[FirstName] AS [C1]      FROM [dbo].[UserAccounts] AS [Extent1])  AS [Project1]ORDER BY [Project1].[LastName] ASC
步驟4:添加和更新資料

下面將向你介紹如何添加和更新表中的資料。

1.轉到設計檢視,雙擊Save按鈕,建立該按鈕的點擊事件。

2.處理點擊事件的代碼如下:

using (OrderDBContainer db = new OrderDBContainer())            {                UserAccount userAccount = new UserAccount();                userAccount.FirstName = txtFirstName.Text;                userAccount.LastName = txtLastName.Text;                userAccount.AuditFields.UpdateDate = DateTime.Now;                if (ddlUsers.SelectedItem.Value == "")                {                    //Adding                                        userAccount.AuditFields.InsertDate = DateTime.Now;                    db.UserAccounts.AddObject(userAccount);                }                else                {                    //Updating                    userAccount.Id = Convert.ToInt32(ddlUsers.SelectedValue);                    userAccount.AuditFields.InsertDate = Convert.ToDateTime(lblInserted.Text);                    db.UserAccounts.Attach(userAccount);                    db.ObjectStateManager.ChangeObjectState(userAccount, System.Data.EntityState.Modified);                }                db.SaveChanges();                lblInserted.Text = userAccount.AuditFields.InsertDate.ToString();                lblUpdated.Text = userAccount.AuditFields.UpdateDate.ToString();                //Reload the drop down list                LoadUserDropDownList();                //Select the one the user just saved.                ddlUsers.Items.FindByValue(userAccount.Id.ToString()).Selected = true;            }        }

代碼首先建立OrderDBContainer對象,再建立UserAccount對象,用輸入的值填充UserAccount對象屬性。更新日期用系統目前時間,接著判斷是更新操作還是添加操作了。最後就是更新Drop Down List的值並選中剛剛操作的UserAccout。這裡的db.SaveChanges()最後實際上是在資料庫中執行添加或更新語句。

 

步驟5.查詢資料

下面是實現當使用者選擇某一個Drop Down List項時,顯示詳細資料的功能。

1.雙擊視圖設計器中的Drop Down List,這時會建立Drop Down List的SelectedIndexChanged方法。

2.編寫SelectedIndexChanged方法的代碼如下:

if (ddlUsers.SelectedValue == ""){  txtFirstName.Text = "";  txtLastName.Text = "";  lblInserted.Text = "";  lblUpdated.Text = "";}else{  //Get the user from the DB  using (OrderDBContainer db = new OrderDBContainer())  {    int userAccountId = Convert.ToInt32(ddlUsers.SelectedValue);        List<UserAccount> userAccounts = (from u in db.UserAccounts                                                       where u.Id == userAccountId                                                       select u).ToList();     if (userAccounts.Count() > 0)    {      UserAccount userAccount = userAccounts[0];      txtFirstName.Text = userAccount.FirstName;      txtLastName.Text = userAccount.LastName;      lblInserted.Text = userAccount.AuditFields.InsertDate.ToString();      lblUpdated.Text = userAccount.AuditFields.UpdateDate.ToString();    }    else    {      //Error: didn't find user.      txtFirstName.Text = "";      txtLastName.Text = "";      lblInserted.Text = "";      lblUpdated.Text = "";    }  }}

代碼根據Drop Down List選擇的Id,用Linq從資料庫中查詢一條資料並且顯示出來。

步驟6:刪除資料

最後就是刪除資料的功能了。 1.轉到視圖設計器,雙擊“Delete”按鈕。 2.添加如下代碼:

if (ddlUsers.SelectedItem.Value != "")            {  using (OrderDBContainer db = new OrderDBContainer())      {    UserAccount userAccount = new UserAccount();    userAccount.Id = Convert.ToInt32(ddlUsers.SelectedValue);    db.UserAccounts.Attach(userAccount);    db.ObjectStateManager.ChangeObjectState(userAccount, System.Data.EntityState.Deleted);    db.SaveChanges();     LoadUserDropDownList();    txtFirstName.Text = "";    txtLastName.Text = "";    lblInserted.Text = "";    lblUpdated.Text = "";  }}

代碼首先建立了一個UserAccount對象,將它的Id設定為選中項的Id.然後將UserAccount附加到UserAccount集合中,設定它的狀態為刪除。調用SaveChanges操作,將該條資料刪除,重新整理Drop Down List的資料來源,搞定!

小結

可以發現,使用EF4 輕鬆的就搞定了一般的資料增刪改查操作。

下一篇文章,我將向你介紹如何採用預存程序進行增刪改查操作,而不使用EF產生的SQL語句,希望你能喜歡。

本文相關項目檔案:點擊下載

本文獨立部落格連結:http://lloydsheng.com/2010/04/aspnet40-entityframework4-how-to-crud-using-entityframework.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.