EF中的ModelFirst设计实例
来源:互联网 发布:江苏省大数据交易中心 编辑:程序博客网 时间:2024/04/29 18:21
EF有三种设计模式,前面的文章:EF中的DBFirst实例、尝试 Entity Framework POCO功能与CodeFirst的结合两篇文章已经为大家讲解了如何先设计数据库,之后根据数据库来设计实体数据模型以及如何先写代码,之后根据代码生成数据库、实体数据模型。今天就为大家讲解最后的一种设计模式:ModelFirst
一、新建项目
新建一个Web项目:EFModelFirst(具体过程不再累述),在该项目下添加一个Web页面Login.aspx,实现一个简单的用户注册以及登陆功能。再添加一个一般处理程序(不理解的可以参考我的另一篇文章:.net中的一般处理程序实例)LoginHandler.ashx。
二、新建实体数据模型
在项目的根目录下右击,选择添加新项->新建项->数据->ADO.Net 数据实体模型。可以修改实体数据模型的名称,在此将名称改为Demo.edmx。点击添加按钮,进入实体模型向导页面,选择空模型,点击完成。VS会默认问你打开一个实体数据模型设计器在该设计器内添加实体类User,添加属性Id,Password,具体过程不再讲述。
在实体数据模型设计器内右击->根据模型生成数据库,这是会出来一个生成数据库向导(都是一些SQL的脚本语言),单击完成,VS会默认打开一个页面。在该页面的右上角处选择运行,最后就会在数据库中生成一个User表(需要实现建立一个数据库)。
三、添加代码
1.Web页面
<body> <form id="form1" runat="server"> <div style="text-align:center;"> <span>用户名</span><input type="text" name="username" value="" id="user" /><br /> <span>密码 </span><input type="text" name="password" value=" " id="password"/><br /> <input type="button" name="register" value="注册" id="reg"/> <input type="submit" name="submit" value="登陆" id="sub"/> </div> </form> <script type="text/javascript"> $(document).ready(function () { $("#reg").click(function () { $.post("LoginHandler.ashx", { "username": $("#user").val(), "password": $("#password").val(), "type": "register" }, function (msg) { if (msg == "用户名已存在!") { alert("该用户名已存在,请重新注册!"); } if (msg == "请填写用户名密码") { alert("请填写用户名密码!"); } if (msg == "注册成功") { alert("注册成功!"); } } ); }) $("#sub").click(function () { $.post("LoginHandler.ashx", { "username": $("#user").val(), "password": $("#password").val(), "type": "submit" }, function (msg) { if (msg == "请填写用户名密码") { alert("请填写用户名密码!"); } if (msg == "用户名或密码错误") { alert("用户名或密码错误,请填写用户名密码!"); } if (msg == "登陆成功") { alert("登陆成功!"); } }) }) }) </script></body>
2. 一般处理程序 LoginHandler.ashx
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //context.Response.Write("Hello World"); string user=context.Request["username"]; string password = context.Request["password"]; if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(password)) { context.Response.Write("请填写用户名密码"); context.Response.End(); } int username = Convert.ToInt16(user); string type=context.Request["type"]; DemoContainer democontext = new DemoContainer(); if (type == "register") //注册事件 { //var reslut = from c in democontext.User where c.Id == username select c; IEnumerable<User> register = from c in democontext.User where c.Id == username select c; foreach(var item in register)//此处有待简化 { if (item != null) { context.Response.Write("用户名已存在!"); context.Response.End(); } } User reguser = new User(); reguser.Id = username; reguser.Password = password; democontext.User.AddObject(reguser); democontext.SaveChanges(); context.Response.Write("注册成功"); context.Response.End(); } else if (type == "submit")//登陆事件 { var reslut = from c in democontext.User where c.Id == username&&c.Password==password select c; foreach (var item in reslut) { if (item == null) { context.Response.Write("用户名或密码错误!"); context.Response.End(); } } context.Response.Write("登陆成功"); context.Response.End(); } } public bool IsReusable { get { return false; } }
四、测试
五、总结
1.作为三种设计模式之一的ModelFirst与CodeFirst设计模式有很多相似之处,相似的地方是都需要先设计实体类,之后根据实体类更新数据库。不同之处是选择ModelFirst时EF会自动的为我们创建实体类上下文、实体类、映射等代码,比较方便;而CodeFirst是需要我们自己写实体类上下文、实体类、映射等代码,会有一点麻烦,也比较容易出错
2.三种设计模式有优有劣,由于没有怎么具体使用它们做过项目,不好下定论
3.前台代码的处理有后台代码还有一般处理程序两种处理方法。本篇选用的是一般处理程序的设计方法,当然也可以在页面的后台代码里面写处理方法
4.本篇对注册和登陆采用了JS中的异步提交的方式,其实本可以不使用此种方式,在这里看不出来异步的效果,在此使用只是为了练习使用
六、易犯错误
1.js异步提交数据提交格式不正确
2.Linq语句掌握不牢固,查询或添加数据出错
七、遗留问题
<script type="text/javascript"> $(document).ready(function () { var username = $("#username").val();//"" var password = $("#password").val();//"" $("#reg").click(function () { $.post("LoginHandler.ashx", { "username": username, "password": password, "type": "register" }, function (msg) { if (msg == "用户名已存在!") { alert("该用户名已存在,请重新注册!"); } if (msg == "请填写用户名密码") { alert("请填写用户名密码!"); } if (msg == "注册成功") { alert("注册成功!"); } } ); })第一种方式异步提交时username以及password总是""(难道是和$(dicument).ready()有关?)
方式二:
$(document).ready(function () { $("#reg").click(function () { $.post("LoginHandler.ashx", { "username": $("#user").val(), "password": $("#password").val(), "type": "register" }, function (msg) { if (msg == "用户名已存在!") { alert("该用户名已存在,请重新注册!"); } if (msg == "请填写用户名密码") { alert("请填写用户名密码!"); } if (msg == "注册成功") { alert("注册成功!"); } } ); })
方式二却能够正确的提交数据
- EF中的ModelFirst设计实例
- 关于EF(entity framework)中的codefirst、modelfirst和databasefirst
- EF之ModelFirst实体先行
- 【EF系列】ModelFirst实体优先
- 深入浅出EF之ModelFirst和DBFirst
- EF下CodeFirst、DBFirst与ModelFirst分析
- EF学习和使用(二)ModelFirst
- EF下 CodeFirst、DBFirst与ModelFirst分析
- EF中的DBFirst实例(上)
- EF中的DBFirst实例(下)
- ado.net EF CodeOnly/CodeFirst设计模式实例演示
- EF中的来自数据库的EF设计器和来自数据库的CodeFirst的区别
- 黑马程序员_学习日记76_801ASP.NET(ORM框架CRUD、EF ModelFirst编程方式、延迟加载机制)
- 【EF 1】EF实体框架 原理+实例
- ModelFirst ,DBFirst两种设计模型的区别和两种更新的区别
- 【EF】EF映射中的延迟加载
- 【EF】EF中的对表操作
- 设计中的道理_实例
- JPA 的getsingleresult方法 报entity not found
- Redis 键(key)
- 网络“黑色产业链”调查:环环相扣的数据泄露
- [Leetcode]Recover Binary Search Tree
- 小马哥 -----高仿红米note 主板为w5160 W 联通版刷机识别图与开机界面图
- EF中的ModelFirst设计实例
- 面试题:如何在一千万个不重复整数(电话号码)中查找某个特定数 位运算 bitmap
- Android Service 完全解析(上)
- Unicode转汉字
- Linux的chattr与lsattr命令详解
- OpenStack之Nova分析——Nova API服务
- 欧几里得(辗转相除)证明
- _beginThreadex创建多线程
- 将以逗号隔开的字符串,转化为字符数组并获取每一个的内容