zoukankan      html  css  js  c++  java
  • EF之Database First

    Entity Framework支持Database First、Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样。我综合考虑。主要适用Database First和Code only,所以总结着两种模式!

    一、Database First

    工具sql 2008和VS2010

    建了一个Text数据表,表内容如下

    图一:数据库及表结构

    建一个解决方案,同时新建一个EFTest的web项目,然后添加一个DatabaseFirst的类库
    图二:解决方案及项目结构

    在Visual Studio解决方案的DatabaseFirst项目中,添加一个名为DatabaseFirst.edmx的ADO.NET实体数据模型,如下图所示:

    图三:添加ADO.NET实体数据模型

    点击“添加”按钮后,进入创建实体数据模型向导的选择模型内容界面,如下图所示:

    四:选择从数据库生成模型

    选择“从数据库生成”图标,并点击“下一步”按钮,进入选择数据连接界面,如下图所示:

    五:设置数据连接

    指定你的本地数据连接,选择“是,在连接字符串中包括敏感数据”选项,并为实体连接设置名称为“DatabaseFirst”,点击“下一步”按钮,进入选择数据库对象界面,如下图所示:

    选择数据库对象

    可供选择的数据库对象包括表、视图和存储过程。按上图所示设置后,点击“完成”按钮,Visual Studio将自动完成从Database到实体数据模型的生成工作。如下图所示:

    图七由数据库生成的实体对象模型

    如图生成实体对象模型的时候会生成一个App.config,会有这样一段代码,就是数据库连接的代码,我们可以把他考到web.config中,代码如下图:

    <connectionStrings>
            <add name="TestEntities" 
                 connectionString="metadata=res://*/DatabaseFirst.csdl|res://*/DatabaseFirst.ssdl|res://*/DatabaseFirst.msl;
                 provider=System.Data.SqlClient;
                 provider connection string=&quot;
                 data source=ASIAIT-SERVER\SERVER2008R2;
                 initial catalog=Test;
                 persist security info=True;
                 user id=sa;
                 password=123;
                 multipleactiveresultsets=True;
                 App=EntityFramework&quot;" 
                 providerName="System.Data.EntityClient" />
        </connectionStrings>

    然后在web项目中添加List.aspx进行业务的增删改查:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="EFTest.List" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <style type="text/css">
            .style1
            {
                 42px;
            }
            .style2
            {
                 166px;
            }
            .style3
            {
                 57px;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:Label ID="lblError" runat="server" ForeColor="Red" />
        <div id="toolbar">
            帐号:
            <asp:TextBox ID="tbAccount" runat="server" />
            <asp:Button ID="btnSearch" runat="server" Text="搜索" />
        </div>
    <asp:ListView ID="lvUsers" runat="server" onitemdeleting="lvUsers_ItemDeleting" 
                onitemediting="lvUsers_ItemEditing"  DataKeyNames = "ID" 
                onitemupdating="lvUsers_ItemUpdating">
        <LayoutTemplate>
            <table border="1" width="800">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th width="200">姓名</th>
                        <th width="60">性别</th>
                        <th width="60">年龄</th>
                        <th width="60">电话</th>
                        <th width="150">操作</th>
                    </tr>
                </thead>
                <tbody>
                    <tr id="itemPlaceholder" runat="server"></tr>
                </tbody>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><a href='Form.aspx?ID=<%# Eval("ID") %>' target="_blank"><%# Eval("ID") %></a></td>
                <td><%# Eval("Name") %></td>
                <td><%# Eval("Sex") %></td>
                <td><%# Eval("Age") %></td>
                <td><%# Eval("Phone")%></td>
                <td>
                    <asp:Button ID="btnEdit" runat="server" Text="修改" CommandName="Edit" CommandArgument='<%#Eval("ID")%>'/>
                    <asp:Button ID="ibtnDelete" runat="server" Text="删除" CommandName="Delete" CommandArgument='<%#Eval("ID")%>' OnClientClick="return confirm('删除的数据不可恢复,确定要执行删除操作吗?');" />
                </td>
            </tr>
        </ItemTemplate>
    <EditItemTemplate>
        <tr>
            <td><asp:TextBox ID="tbId" runat="server" Text='<%# Bind("ID") %>' /></td>
            <td><asp:TextBox ID="txtName" runat="server"  Text='<%# Eval("Name") %>'/></td>
            <td><asp:DropDownList ID="dropSex" runat="server" Height="30px" Width="145px">
                        <asp:ListItem>男</asp:ListItem>
                        <asp:ListItem>女</asp:ListItem>
                    </asp:DropDownList></td>
            <td><asp:TextBox ID="txtAge" runat="server" Text='<%# Eval("Age") %>'/></td>
            <td><asp:TextBox ID="txtphone" runat="server" Text='<%# Eval("Phone")%>' /></td>
            <td>
                <asp:Button ID="tbnEdit" runat="server" Text="保存" CommandName="Update" ValidationGroup="Update" />
                <asp:Button ID="tbnCancel" runat="server" Text="取消" CommandName="Cancel" CausesValidation="false" />
            </td>
        </tr>
    </EditItemTemplate>
        <EmptyDataTemplate>
            没有符合条件的数据
        </EmptyDataTemplate>
    </asp:ListView>
    <table border="1" width="800">
    <tr>
                <td class="style1">姓名</td>
                <td class="style2"><asp:TextBox ID="tbName" runat="server"  /></td>
                <td class="style3">性别</td>
                <td>
                    <asp:DropDownList ID="dropSex" runat="server" Height="30px" Width="145px">
                        <asp:ListItem>男</asp:ListItem>
                        <asp:ListItem>女</asp:ListItem>
                    </asp:DropDownList>
                </td>
                <td></td>
            </tr>
            <tr>
                <td class="style1">年龄</td>
                <td class="style2"><asp:TextBox ID="tbAge" runat="server" /></td>
                <td class="style3">电话</td>
                <td><asp:TextBox ID="tbPhone" runat="server" /></td>
                <td><asp:Button ID="btnAdd" runat="server" Text="添加" CommandName="Insert" 
                        ValidationGroup="Insert" onclick="btnAdd_Click" /></td>
            </tr>
            </table>
        </form>
    </body>
    </html>

    后代代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using DatabaseFirst;
    using System.Xml.Linq;

    namespace EFTest
    {
        public partial class List : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    this.lblError.Text = string.Empty;
                    BindDate();
               }
            }
            /// <summary>
            /// 绑定数据
            /// </summary>
            public void BindDate()
            {
                var db = new DatabaseFirst.TestEntities();
                var list = db.Users.Where(o => "" == "");
               
                this.lvUsers.DataSource = list;
                this.lvUsers.DataBind();
            }


            /// <summary>
            /// 添加用户
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void btnAdd_Click(object sender, EventArgs e)
            {

                using (var db = new DatabaseFirst.TestEntities())
                {
                    if (db.Users.Count(o => o.Name == tbName.Text) > 0)
                    {
                        this.lblError.Text = "姓名已被占用!";
                        return;
                    }

                    var user = new User();
                    user.Name = tbName.Text;
                    user.Phone = tbPhone.Text;
                    user.Sex = dropSex.SelectedValue;
                    user.Age = Convert.ToInt32(tbAge.Text);
                    user.RoleId = 1;
                    db.Users.AddObject(user);

                    db.SaveChanges();
                }

                BindDate();
            }

            /// <summary>
            /// 编辑用户
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void lvUsers_ItemEditing(object sender, ListViewEditEventArgs e)
            {
                lvUsers.EditIndex = e.NewEditIndex;
                BindDate();
            }

            /// <summary>
            /// 更新数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void lvUsers_ItemUpdating(object sender, ListViewUpdateEventArgs e)
            {
                int id = Convert.ToInt32(lvUsers.DataKeys[e.ItemIndex].Value.ToString());
                string name = ((TextBox)(lvUsers.Items[e.ItemIndex].FindControl("txtName"))).Text;
                string age = ((TextBox)(lvUsers.Items[e.ItemIndex].FindControl("txtAge"))).Text;
                string phone = ((TextBox)(lvUsers.Items[e.ItemIndex].FindControl("txtPhone"))).Text;
                string sex = ((DropDownList)(lvUsers.Items[e.ItemIndex].FindControl("dropSex"))).SelectedValue;
                using (var db = new DatabaseFirst.TestEntities())
                {
                    var user = db.Users.SingleOrDefault(o => o.ID == id);

                    if (db.Users.Count(o => o.Name == name && o.ID != user.ID) > 0)
                    {
                        this.lblError.Text = "姓名已被占用!";
                        e.Cancel = true;
                    }
     
                    user.ID = id;
                    user.Name = name;
                    user.Phone = phone;
                    user.Sex = sex;
                    user.Age = Convert.ToInt32(age);
                    user.RoleId = 1;
                    db.Users.ApplyCurrentValues(user);

                    db.SaveChanges();
                    BindDate();
                }
            }

            /// <summary>
            /// 删除数据
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            protected void lvUsers_ItemDeleting(object sender, ListViewDeleteEventArgs e)
            {
                int id = Convert.ToInt32(lvUsers.DataKeys[e.ItemIndex].Value.ToString());
                using (var db = new DatabaseFirst.TestEntities())
                {
                    var user = db.Users.SingleOrDefault(o => o.ID == id);
                    db.Users.DeleteObject(user);
                    db.SaveChanges();
                    BindDate();
                }
            }

        }
    }

     

     最后运行效果:

  • 相关阅读:
    android之wifi开发
    android wifi讲解 wifi列表显示
    jQuery格式化时间插件formatDate
    Android自定义照相机实现(拍照、保存到SD卡,利用Bundle在Acitivity交换数据)
    Android圆形图片自定义控件
    Android自定义控件
    SQL表连接查询(inner join、full join、left join、right join)
    Jquery 中each循环嵌套的使用示例教程
    JQuery遍历json数组的3种方法
    怎样从数据库层面检測两表内容的一致性
  • 原文地址:https://www.cnblogs.com/gaoshuai/p/2970543.html
Copyright © 2011-2022 走看看