#.NET 使用EF搭建三层完成查询,模糊查询

Posted 爱喝可乐的阿囧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#.NET 使用EF搭建三层完成查询,模糊查询相关的知识,希望对你有一定的参考价值。

使用EF、搭建三层并进行查询及模糊查询

数据库的搭建

数据表的设计

创建数据库:ForumDB
创建数据表:Articles(文章表)、Users(用户表)
Articles表

字段类型
FID(编号)int
FTitle(标题)nvarchar(200)
FAuthor(作者:外键用户表ID)int
FText(文章)text
FTime(发布时间)datetime
FHit(点击量)int

Users表

字段类型
ID(编号)int
ULogin(账号)nvarchar(50)
UPwd(密码)nvarchar(50)
UName(昵称)nvarchar(50)

设计外键关系

项目的搭建

项目、三层的搭建

数据库搭建完成就要开始创建ASP.NET项目啦
创建一个项目:WebSite
创建完项目后,开始搭建三层架构
首先来搭建Models层添加一个类库项目,取名Models:

类库是.NET Framework的奥,别建错了!
接下来就是DAL(数据访问层)层:也是一个.NET Framework的类库
还有就是BLL(逻辑层)层:同上
建完之后我们会有四个项目,如下:

到了这里,我们还只是搭了个空壳,接下来我们就要开始给这个空壳赋予灵魂。

EF的搭建

在Models层中,我们来添加一个ADO.NET实体数据模型

选择来自数据库的EF设计器

下一步我们选择新建连接,依次输入自己的服务器名称,选择SQL Server身份验证,输入用户名密码,选择我们的数据库

点击确定,我们可以看到下面有一个:

这个就是我们之后要对数据进行操作的时候要调用的一个名字。上面还有一个是或者否的选择要我们去选择,对于这个项目来说并没有什么特殊的数据,所以选择哪一个都可以,如何我们点击下一步,实体框架就选默认的就行。

在这里记得要选择我们要用到的表,其他的暂时不用管。最后点击完成即可,然后我们就可以看到下面这个表了:

还有一个重点!!!我们找到Models层里的App.config文件,在里面找到:

<connectionStrings>
    <add name="ForumDBEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=ForumDB;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

将这一段复制到WebSite项目里的Web.config文件里
然后找到models层里的引用中的EntityFramework文件,右键选择在对象浏览器中查看

右下角有一行地址,将那行地址复制下来,注意别复制文件名,然后在每一个层里的引用添加上该路径的这两个文件
我们就需要在BLL层右键引用,点击添加引用

然后点击左下方的浏览,然后点击右下角的浏览,根据刚刚复制的路径去找到前面说的那两个文件,然后选择上那两个文件点击添加即可。
接下来我们还要右键项目添加互相的引用关系:DAL引用Models,BLL引用DAL和Models,WebSite引用BLL和Models

然后我们的项目搭建基本就完成了
接下来开始写实现代码

功能实现

查询

首先来实现查询功能,让数据展示出来:
在DAL层创建一个类:ArticlesService
其中首先就要把实体数据模型先实例化一个出来方便使用:

ForumDBEntities db = new ForumDBEntities();

下面是在DAL层中查询的方法:

		/// <summary>
        /// 查询
        /// </summary>
        /// <returns></returns>
        public List<Articles> GetArticles()
        
            return db.Articles.Select(u=>u).ToList();
        

(如果没报错,这段可忽略)db.Articles在这里如果报错的话就ALT+Enter然后安装它需要的那个框架,如果运行报框架错的话,可能就是框架没引用上,我们就需要右键引用,点击添加引用

然后点击左下方的浏览,然后点击右下角的浏览,去找到前面说的那两个文件,然后选择上那两个文件点击添加即可。
然后我们在BLL层中创建ArticlesManager类,首先还是要实例化DAL层里的ArticlesService类,方便方法的调用,代码如下:

		/// <summary>
        /// 查询
        /// </summary>
        /// <returns></returns>
        public List<Articles> GetArticles()
        
            return service.GetArticles();
        

因为我们在DAL层中已经进行的数据查询的操作,所以我们在这里直接返回查出来的集合即可。
接下来,我们在Website中建一个Web窗体Home.aspx
前端代码如下:

	<form id="form1" runat="server">
        <div>
            <p>作者:<asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
                标题:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="查询" OnClick="Button1_Click" />
            </p>
            <table>
                <tr>
                    <td>作者</td>
                    <td>标题</td>
                    <td>时间</td>
                    <td>操作</td>
                </tr>
                <asp:Repeater ID="Repeater1" runat="server">
                    <ItemTemplate>
                        <tr>
                            <td><%# Eval("Users.UName")%></td>
                            <td><%# Eval("FTitle")%></td>
                            <td><%# Eval("FTime")%></td>
                            <td>
                                <asp:LinkButton ID="LinkButton1" CommandArgument='<%# Eval("FID")%>' runat="server">删除</asp:LinkButton></td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
            </table>
        </div>
    </form>

相对应,在后端,我们首先还是要先把BLL层中的ArticlesManager类实例化出来

ArticlesService service = new ArticlesService();

接下来就是在加载事件中写数据绑定了:

	protected void Page_Load(object sender, EventArgs e)
        
            if (!IsPostBack)
            
                Repeater1.DataSource= manager.GetArticles();
                Repeater1.DataBind();
            
        

最基本的数据查询就出来了,接下来讲的是模糊查询的方法

模糊查询

DAL层中代码为:

		/// <summary>
        /// 根据标题模糊查询
        /// </summary>
        /// <param name="tit">标题</param>
        /// <returns></returns>
        public List<Articles> GetArticlesByTitle(string tit)
        
            return db.Articles.Where(u=>u.FTitle.Contains(tit)).ToList();
        

Contains(tit)方法就是判断字符串中包含该字符,这里主要就是加了个查询的条件,其他的跟普通查询都一样,接下来我们在BLL层调用这个方法即可:

		/// <summary>
        /// 模糊查询
        /// </summary>
        /// <param name="tit"></param>
        /// <returns></returns>
        public List<Articles> GetArticlesByTitle(string tit)
        
            return service.GetArticlesByTitle(tit);
        

前端按钮的点击事件中,代码如下:

	protected void Button1_Click(object sender, EventArgs e)
        
            if (TextBox1.Text == string.Empty)
            
                Repeater1.DataSource = manager.GetArticles();
                Repeater1.DataBind();
            
            else
            
                Repeater1.DataSource = manager.GetArticlesByTitle(TextBox1.Text);
                Repeater1.DataBind();
            
        

先判断文本框是否为空,如果是空的就查全部,否则就根据条件查询

以上就是本片文章的基本内容,希望能帮助到大家~
如果哪里有问题,可以随时私信我噢,感谢大家支持~

以上是关于#.NET 使用EF搭建三层完成查询,模糊查询的主要内容,如果未能解决你的问题,请参考以下文章

#.NET 使用EF搭建三层完成查询,模糊查询

#.NET 使用EF搭建三层完成查询,模糊查询

ASP.NET MVC5+EF6搭建三层实例

Asp.Net MVC+EF+三层架构的完整搭建过程

.Net框架搭建之1SQL Server EF MVC简单三层框架

解决 EF 分层查询的一个性能问题[转]