EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)
学习项目进行中,持续更新。
SyntaxHighlighter貌似在2011wlw里报错,无法着色。
EF记得在我搞Linq2Sql不久就放出声音出来了,说有多么多么好。
记得早先版本里尝鲜的时候我一看到那坨xml就恶心,也就没心情接着玩了。
没办法Linq2Sql里的xml就被它搞的死去活来,哎,过渡产品
本来想凭着Linq2Sql的经验不看介绍直接玩,完了,托大了,几个小时一直返回“no ProviderManifestToken string …”
好吧,认真看ADO TEAM BLOG的文章,太不负责任了,说详细点会死啊,“痛苦并快乐着”。
接着看看ScottGu,还是老大负责,烧香,行礼~
EF版本更新也太快了,不过真的是越来越方便了,要跟上时代。
毫不犹豫地选择Code-Fist 方向,一路凯歌前进。
先贴上Entity 代码:
1: [DataContract]
2: public class BlogArticle
3: {
4: [Key]
5: [Required]
6: [DataMember]
7: public int BlogAritcleID { get; set; }
8:
9: [Required(ErrorMessage="博客标题不可以为空!")]
10: [StringLength (256,ErrorMessage="博客标题最长不超过256个字符。")]
11: [DataMember]
12: public string Title { get; set; }
13:
14: [Required(ErrorMessage="博客文章不可以为空!")]
15: [StringLength(25600,ErrorMessage="博客标题最长不超过25600个字符。")]
16: [DataMember]
17: public string Article { get; set; }
18:
19: [Required]
20: [DataMember]
21: public int BlogCategoryID { get; set; }
22:
23: [Required]
24: [DataMember]
25: public DateTime PublishDate { get; set; }
26:
27: [Required]
28: [DataMember]
29: public DateTime UpdateDate { get; set; }
30:
31:
32: public virtual BlogCategory BlogCategory { get; set; }
33: }
34: [DataContract]
35: public class BlogCategory
36: {
37: [Key]
38: [Required]
39: [DataMember]
40: public virtual int BlogCategoryID { get; set; }
41:
42: [Required]
43: [DataMember]
44: public virtual string Name { get; set; }
45:
46: [JsonIgnore]
47: public virtual ICollection<BlogArticle> BlogArticles { get; set; }
48: }
32,47两行代码使得DBContext可以对这两个表建立外键关系,神之笔啊,同理多对多也差不多。
上面DATAMEMBER等特性是Json.Net需求的,如果没有声明会在json序列化的时候报错,其中就有“RenlationshipManage”JN无法继续序列化,会引发自引用。所以这里必须用排他法标注。
接着DBContext,这个东西让我想起了Linq to sql,当时是这么个Context,看起来倍感亲切。
这个玩意儿神奇,EF就是靠它找到那些entity,烧香,行礼。
哪位老大能告诉我下面Seed里为什么数据总是添加进不去?:
1: public class BlogContext:DbContext
2: {
3: public DbSet<BlogArticle> BlogArticles { get; set; }
4: public DbSet<BlogCategory> BlogCategories { get; set; }
5:
6: public BlogContext()
7: { }
8: public BlogContext(string cnn)
9: : base(cnn)
10: { }
11:
12: protected override void OnModelCreating(DbModelBuilder modelBuilder)
13: {
14:
15: base.OnModelCreating(modelBuilder);
16: }
17:
18: public static void AddSeedData(BlogContext c)
这里DBSET<T>告诉DBContext哪些是要map进数据库的实体~进过这里的实体类型也会被动改变,因为他们即将拥有关系。
Application_Start
1: protected void Application_Start()
2: {
3: AreaRegistration.RegisterAllAreas();
4:
5: RegisterGlobalFilters(GlobalFilters.Filters);
6: RegisterRoutes(RouteTable.Routes);
7:
8: Database.SetInitializer<BlogContext>(new DropCreateDatabaseIfModelChanges<BlogContext>());
9: }
第一次运行会创建相应的数据库,可以指定config中的连接字符串。
虽然没有在项目中创建EDM,实际上是放在自动创建的库中了。
然后就是做出以下两个界面以及引进JqueryUI
第一次用JqueryUI,太TMD爽了,哇哈哈~~
AJAX
客户端“删除”链接:
1: <a href="javascript:" οnclick="ajaxPost('./Article/Delete?id=@item.BlogAritcleID')">Delete</a>
客户端“删除”请求:
1: <script language ="javascript" type="text/javascript" >
2: function ajaxPost(urlStr) {
3: $.ajax({
4: url: urlStr,
5: beforeSend: function () { ShowMessage("正在提交,请等待!"); },
6: success: function (data) { ShowMessage(data); setTimeout(refreshPage, 800); },
7: error: function (data) { ShowMessage(data); }
8: });
9: }
10:
11:
12: </script>
2011WLW一个劲当掉,晕~~
客户端“添加”以及“编辑”请求(以BlogArticleID是否<0来区分):
1: $.ajax({
2: type: "POST",
3: contentType:"application/json",
4: url:"Do",
5: data:articleStr,
6: dataType:'json',
7: processData:true,
8: beforeSend: function () {
9: ShowMessage("正在提交");
10: },
11: success:function(data){
12: ShowMessage(data.Message);
13: setTimeout(toHomePage,1000);
14: },
15: error:function() {
16: ShowMessage("Your request is failed, pls check your internet and try again later!");
17: }
18: });
这里用json来交互,json一直只闻其名,一直以为挺麻烦的东西没想到用起来挺顺的。
对了,谁能告诉我为什么Jquery在ajax提交的时候,datatype不是string的全要process成querystring啊?
json对象与json string的转换 articleStr=JSON.stringify(article);
服务端:
1: [HttpPost]
2: public ActionResult Do()
3: {
4: var entityStr=string.Empty;
5:
6: //read json entity from post request
7: using (System.IO.StreamReader reader = new System.IO.StreamReader(Request.InputStream))
8: {
9: entityStr = reader.ReadToEnd();
10:
11: //jquery ajax process the data by utf-8, need to convert back
12: entityStr = HttpUtility.UrlDecode(entityStr);
13: }
14:
15: //try convert to entity back
16: BlogArticle article=null;
17: ResponseState rs = new ResponseState();
18: try
19: {
20:
21: article = JsonConvert.DeserializeObject<BlogArticle>(
22: entityStr
23: , new Newtonsoft.Json.Converters.IsoDateTimeConverter())//keep the date formate same as new date in javascript
24: as BlogArticle;
25:
26: if (article.BlogAritcleID < 0)
27: blogContext.BlogArticles.Add(article);
28: else
29: {
30: blogContext.BlogArticles.Attach(article);
31: var stateEntry = ((IObjectContextAdapter)blogContext)
32: .ObjectContext
33: .ObjectStateManager
34: .GetObjectStateEntry(article);
35: stateEntry.SetModifiedProperty("Title");
36: stateEntry.SetModifiedProperty("Article");
37: stateEntry.SetModifiedProperty("BlogCategoryID");
38: stateEntry.SetModifiedProperty("UpdateDate");
39: }
40:
41: blogContext.SaveChanges();
42:
43: rs.isSuccess = true;
44: rs.Message = "Submit Success!";
45: }
46: catch (Exception exc)
47: {
48: rs.isSuccess = false;
49: rs.Message = exc.Message;
50: //rs.Message = "For some reason ,your article refused! Pls check and submit again!";
51: }
52: finally
53: {
54: System.Threading.Thread.Sleep(800);//wait to show ajax effect
55: Response.Clear();
56: Response.Write(JsonConvert.SerializeObject(rs));//response the result
57: Response.ContentType = "application/json";
58: Response.End();
59: }
60:
61: return new EmptyResult();//no view need
62: }
对于上面更新实体部分请参考dudu文章
-----------------V1 部分结束-------------------------
加个进度条
简单做个检查防止提交频率过快
1: public static bool SubmitFreCheck()
2: {
3: if (CurrentContext().Session[lastSubmitTime] is DateTime)
4: {
5: var date = (DateTime) CurrentContext().Session[lastSubmitTime];
6: if (date.AddSeconds(3) > DateTime.Now)
7: return true;
8: }
9: return false;
10: }
11:
12: public static void SetLastSubmitDate()
13: {
14: CurrentContext().Session[lastSubmitTime] = DateTime.Now;
15: }
1: function getPageNoprocess(size,pageIndex) {
2: $.ajax({
3: type: "get",
4: url: './Article/GetArticlesByPage?size=' + size + '&pageIndex=' + pageIndex,
5: dataType: "html",
6: beforeSend: function () {
7: CurrentIndex = pageIndex;
8: },
9: success: function (data) {
10: $('#ArticleTable tr[class="data"]').remove();
11: $('#ArticleTable').append(data);
12: getPagerLinks(size, pageIndex);
13: }
14: });
15: }
服务端:
1: [HttpGet]
2: public ActionResult GetArticlesByPage(int? size ,int? pageIndex)
3: {
4: if (size == null || size < 1)
5: size = 5;
6:
7: if (pageIndex == null || pageIndex < 1)
8: pageIndex = 1;
9:
10: System.Threading.Thread.Sleep(500);
11:
12: try
13: {
14: IArticleRepository ar = new ArticleRepository(iUnitOfWork);
15:
16: var eList = ar.GetEntityCollecionByPage((int)size, (int)pageIndex);
17:
18: string repStr = string.Empty;
19: StringBuilder sb = new StringBuilder();
20: if(eList !=null )
21: foreach (var e in eList)
22: {
23: #region table tr build up
24: 。。。
25: #endregion
26: }
27: Response.Clear();
28: Response.Write(sb.ToString());
29: Response.Flush();
30: }
31: catch (Exception exc)
32: {
33: }
34:
35: return new EmptyResult();
36: }
有列表没分页不行,来一个:
眼熟?
本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2011/04/07/2008858.html,如需转载请自行联系原作者
EF 4.1+MVC3+Jquery Ajax+Json.Net+JqueryUI+IUnitOfWork+Repository 学习DEMO(暂停更新)相关推荐
- ajax+php+jq+面向对象,php+jquery+ajax+json的一个最简单实例
html页面: $(function(){ $("#send").click(function(){ var cont = $("input").seriali ...
- struts2 ajax html,Struts2+Jquery+Ajax+Json
现在使用Json来封装并且传递数据的情形是越来越多了,可怎么样在Struts2中来使用Jquery+Ajax+Json来协同工作呢?在网上查了下就那几个例子被转过来转过去的,还有很多例子根本行不通,这 ...
- 13. jquery ajax json 学习
1. 新浪博客上的一个例子,原作者 http://blog.sina.com.cn/s/blog_6ce9e8870101de3t.html index.html <html> <h ...
- Jquery ajax json 不执行success的原因
溺水的鱼 最近在看jQuery的API文档,在使用到jQuery的ajax时,如果指定了dataType为json,老是不执行success回调,而是执行了error回调函数,极度郁闷.后面改为1.2 ...
- jquery ajax json转换出错Invalid JSON
ajax中json转换采用jQuery.parseJSON(json), 1.4版本后的jQuery.parseJSON(json)传入一个畸形的JSON字符串会抛出一个异常. 比如下面的都是畸形的J ...
- jquery ajax json传递数组,jQuery ajax 传递JSON数组到Spring Controller
jQuery ajax传递单个JSON对象到后台很容易,这里记录的是传递多个JSON对象组成的JSON数组到java 后台,并说明java如何解析JSON数组. 1.js代码 var relation ...
- jquery ajax json文件,jQuery ajax读取本地json文件
jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...
- 【jQuery教科书】从jQuery语法到jQuery ajax的每一个知识点(学习总结)
文章目录 @[toc] 一.jQuery概述 1.1 什么是jQuery? 1.2 jQuery的版本须知 1.3 jQuery的功能作用 1.4 为什么要使用jQuery? 1.5 jQueryAP ...
- 基于Jquery+Ajax+Json+高效分页
摘要 分页我相信大家存储过程分页已经很熟悉了,ajax更是耳熟能详了,更别说我们的json,等等. 如果说您没用过这些东东的话,我相信看完这篇博文会对您有帮助的,,如果有任何问题不懂或者有bug没问题 ...
最新文章
- 22种代码味道(Martin Fowler与Kent Beck)
- 历届冬奥会举办地与举办时间
- Windows Azure 解决方案系列: 能源监测减少支出,通过托管平台拓展业务
- 使用递归计算1-n之间的和
- 盘点那些让程序员目瞪口呆的Bug都有什么?
- 原生开发安卓/iOS,Visual Studio迎神器扩展
- 利用Pin实现CodeCoverage
- 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
- MATLAB常用的基本数学函数
- 字节跳动面试经验 php,双指针算法:字节跳动初级面试题 PHP
- linux mysql 查看字符集_Linux中查看和设置MySQL数据库字符集 一
- AD19---彻底解决原理图转PCB时,出现failed to add class member及Unknown Pin的问题
- 初识AvalonDock
- 进制转换和2的幂次方表示
- 康师傅承认:所谓矿物质水实为自来水净化而成
- Python 根据出生日期判断星座
- PCI Express 2D 多媒体显卡_IOEHM-GC_V1.0 Mini-PCIe 显卡_嵌入式行业图像显示_视频加速和2D加速功能
- 机器学习——模型的评估方法速查手册(RMSE+RSE+MAE+RAE+R^2)
- 英语单词词性顺口溜_初小英语语法速记口诀大全——词类
- Skywalking Ⅱ
热门文章
- 【专家观点】张亚勤、张宏江:人工智能的未来是什么?
- 改变宇宙之前,GPT-3最先改变的可能是OpenAI
- ​Arm芯片的新革命在缓缓上演
- 28篇标志性论文见证「自然语言处理NLP」2019-2020年度亮点进展
- 为什么说,我们可能是宇宙中唯一的智慧生命?
- DeepMind成立DMES新部门,旨在研究AI带来的社会伦理问题
- Gartner十大IT预测:七大数字巨头,有五家将心甘情愿“自我颠覆”
- 漫画:什么是 “建造者模式” ?
- 德勤管理咨询热招 | @企业级 IT 大伽和数字化大咖:春风十里不如你!
- 毕业后想拿大厂 Offer?你得完整拥有这些计算机知识体系!