昨天看了两篇文章: ASP.NET Web API(一):使用初探,GET和POST数据【Parry】 HttpClient + ASP.NET Web API, WCF之外的另一个选择【dudu】 通过这两篇文章让我了解了WEB API的简单用法。 Parry是在MVC中使用WebAPI:在Visual Studio 2012中新建MVC4项目,在App_Start目录下有一个WebApiConfig.cs文件,这个文件中就是相应的Web API的路由配置了。 我也根据这两篇文章写了一个简单的测试程序。 先创建了一个UserModel
1 2 3 4 5 |
public class UserModel { public string UserID { get; set; } public string UserName { get; set; } } |
然后添加Web API Controller
1 2 3 4 5 6 7 |
public class UserController : ApiController { public UserModel getAdmin() { return new UserModel() { UserID = "000", UserName = "Admin" }; } } |
注册路由
1 2 3 4 5 6 7 8 |
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } |
在Global中注册
1 2 3 4 |
protected void Application_Start(object sender, EventArgs e) { WebApiConfig.Register(GlobalConfiguration.Configuration); } |
这个时候用地址栏访问地址:api/user/getadmin 这个时侯默认返回的是XML数据模型。 使用AJAX请求这个api,指定数据格式为json
1 2 3 4 5 6 7 8 9 10 |
$.ajax({ type: 'GET', url: 'api/user/getadmin', dataType: 'json', success: function (data, textStatus) { alert(data.UserID + " | " + data.UserName); }, error: function (xmlHttpRequest, textStatus, errorThrown) { } }); |
alert出来的结果是: 这样看来,真的是dudu所说的,可以根据请求的数据类型返回指定的数据格式。 POST数据 修改一下controller,添加一个add方法
1 2 3 4 |
public bool add(UserModel user) { return user != null; } |
只为了测试,所以这里只判断一下传入的实体是否为空,如果不为空则返回true 我在页面上添加了一个button,代码如下:
1 |
<input type="button" name="btnOK" id="btnOK" value="发送POST请求" /> |
添加JS代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$('#btnOK').bind('click', function () { //创建ajax请求,将数据发送到后台处理 var postData = { UserID: '001', UserName: 'QeeFee' }; $.ajax({ type: 'POST', url: 'api/user/add', data: postData, dataType: 'json', success: function (data, textStatus) { alert(data); }, error: function (xmlHttpRequest, textStatus, errorThrown) { } }); }); |
再次运行页面 我们附加进程进行调试,在发送ajax请求的时候,服务器段接收到的数据如图: from:http://www.cnblogs.com/youring2/archive/2013/03/08/2949455.html
View Details程序猿就是苦逼,每天还得分出一些时间去写博文。天真的很热,今天就随便写一点啦! 1、EF初始化数据库的四中策略 EF可以根据项目中的模型自动创建数据库。下面我们就分类看看Entity Framework数据库初始化四种策略 一、 //每次运行都会创建新的数据库 Database.SetInitializer(new DropCreateDatabaseAlways()); 二、//只有第一次运行~才会创建新的数据库~默认的方式 Database.SetInitializer(new CreateDatabaseIfNotExists()); 三、 //修改模型后~运行~会创建新的数据库 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); 四、//使用自己配置的数据库,请到:web.config中配置自己的连接字符串,注意连接字符串的名称应与上下文:XXXXContext的名字一致。 Database.SetInitializer(null); 注:以上代码请到Global.asax中加上,加上之后会有破浪线,请添加EF的命名空间:using System.Data.Entity; 实例代码如下: protected void Application_Start() { //Entity Framework数据库初始化四种策略 //自己去配置连接字符串 Database.SetInitializer(null); //默认方式 第一次创建 Database.SetInitializer(new CreateDatabaseIfNotExists()); //每一次都会删除旧数据库然后创建新的数据库 Database.SetInitializer(new DropCreateDatabaseAlways()); //模型关系改变时创建新数据库 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterAuth(); } 2、讲完了上述四中策略,下面就讲解一下EF的约定优先原则: EF会尽可能的使用约定而非配置,如果在程序运行时,不按照上述四方法配置具体的数据库连接方式,EF将按照约定创建一个连接,也就是根据模型关系创建一个数据库。EF 创建新数据库的过程如下: 首先EF将尝试连接SQLserverExpress的本地实例,并且查找与上下文:XXXXContext名字相同的数据库,如果EF找不到这个数据库,EF则会根据约定创建一个数据库。 from:http://m.blog.csdn.net/blog/jiangfei009003/38691327
View Details在C#里关于定时器类有3个:System.Windows.Forms.Timer类、System.Threading.Timer类和System.Timers.Timer类。 System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。 System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现轻量、精确的计时,对应用程序、消息没有特别的要求。System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。 public int wrong = 0; System.Timers.Timer time = new System.Timers.Timer(); private void begin_Click(object sender, EventArgs e) { if (action.Text == "启动监测") { action.Text = "停止监测"; label2.Text = "已启动"; if (time.Interval.ToString() == "100") // The default value of interval is 100s. { time.Elapsed += new ElapsedEventHandler(TimeEvent); time.Interval = 1000; } time.Enabled = true; } else { action.Text = "启动监测"; label2.Text = "已停止"; time.Enabled = false; } } private static void TimeEvent(object source, ElapsedEventArgs e) { int tsec = e.SignalTime.Second; int isec = 10; if (tsec == isec) //it will be activated at 10s of every minutes. { if (!Check("http://www.test.com")) { string smtp_server="192.168.8.1"; int port = 25; string mail_from = "test_from@163.com"; string sender="test"; string mail_to = "test_to@163.com"; string receiver="adminer"; string subject = "The site is run out exception on " + DateTime.Now.ToString("yyyyMMddhhmmss"); string body = "The site can not open on " + DateTime.Now.ToString() + ",please check it !"; try { SendEmail(smtp_server, port, mail_from, sender, mail_to, receiver, subject, body); } catch(Exception ex) { MessageBox.Show(ex.Message); } } } } private static bool Check(string urlStr) { HttpWebRequest myWebRequest = null; try { myWebRequest = (HttpWebRequest)WebRequest.Create(urlStr); HttpWebResponse res = (HttpWebResponse)myWebRequest.GetResponse(); if (res.StatusCode == HttpStatusCode.OK) { res.Close(); return true; } else { res.Close(); return false; } } catch (Exception) { return false; } } public static void SendEmail(string smtp_server, int port, string mail_from, string sender, string mail_to, string receiver, string subject, string body) { MailAddress from = new MailAddress(mail_from, sender); MailAddress to = new MailAddress(mail_to, receiver); MailMessage message = new MailMessage(from, to); message.BodyEncoding = Encoding.UTF8; message.IsBodyHtml = true; message.Subject = subject; message.Body = body; SmtpClient client = new SmtpClient(smtp_server, port); //SmtpClient client = new SmtpClient(smtp_server); […]
View Details阅读目录 开始 Lucene简介 效果图 Demo文件说明 简单使用 重点类的说明 存在问题 调整后 Lucene.Net博文与资源下载 做过站内搜索的朋友应该对Lucene.Net不陌生,没做过的也许会问:就不是个查询嘛!为什么不能使用Like模糊查找呢? 原因很简单--模糊查询的契合度太低,匹配关键字之间不能含有其他内容。最重要的是它会造成数据库全表扫描,效率底下,即使使用视图,也会造成数据库服务器"亚历山大",那LuceneNet又是一个神马东西?如何使用?以下给出详细的介绍包括Demo 回到顶部 Lucene简介 首先说明的是--Lucene.Net只是一个全文检索开发包,不是一个成型的搜索引擎, 它的功能就是负责将文本数据按照某种分词算法进行切词,分词后的结果存储在索引库中,从索引库检索数据的速度灰常快. 对以上加粗的词汇稍作下阐述: 文本数据:Lucene.Net只能对文本信息进行检索,所以非文本信息要么转换成为文本信息,要么你就死了这条心吧! 分词算法:将一句完整的话分解成若干词汇的算法 常见的一元分词(Lucene.Net内置就是一元分词,效率高,契合度低),二元分词,基于词库的分词算法(契合度高,效率低)… 切词:将一句完整的话,按分词算法切成若干词语 比如:"不是所有痞子都叫一毛" 这句话,如果根据一元分词算法则被切成: 不 是 所 有 痞 子 都 叫 一 毛 如果二元分词算法则切成: 不是 是所 所有 有痞 痞子 子都 都叫 叫一 一毛 如果基于词库的算法有可能:不是 所有 痞子 都叫 一毛 具体看词库 索引库:简单的理解成一个提供了全文检索功能的数据库 如果文字难以理解 见Demo文件说明中的右侧图吧 回到顶部 效果图 首先展示效果图,避免各位观众不知偶所云. 这里有三张图: 图1 简单使用页面效果图 图2 对数据库新增数据后 索引库更新效果图 图3 将图2中的新增数据修改后 索引库更新效果图 回到顶部 Demo文件说明 回到顶部 简单使用 图1中的BookList.aspx 页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="BookList.aspx.cs" Inherits="Web.LuceneNet.BookList" %> <!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> </head> <body> <form id="form1" method="get" action="BookList.aspx"> <div> 请输入搜索关键字:<input type="text" name="SearchKey" value="" /> <input type="submit" name="btnSearch" value="一哈哈" /> <input type="submit" name="btnCreate" value="创建索引" /> <br /> <ul> <asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <li><a href='#'> <%# Eval("Title") %></a></li> <li><span> <%# Eval("ContentDescription") %></span></li> </ItemTemplate> </asp:Repeater> </ul> </div> </form> </body> </html> |
BookList.aspx.cs 后台的处理操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
using System; using System.Collections.Generic; using System.IO; using Lucene.Net.Analysis.PanGu; using Lucene.Net.Documents; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using PZYM.Shop.BLL; namespace Web.LuceneNet { public partial class BookList : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string btnCreate = Request.QueryString["btnCreate"]; string btnSearch = Request.QueryString["btnSearch"]; if(!string.IsNullOrEmpty(btnCreate)) { //创建索引库 CreateIndexByData(); } if(!string.IsNullOrEmpty(btnSearch)) { //搜索 SearchFromIndexData(); } } /// <summary> /// 创建索引 /// </summary> private void CreateIndexByData() { string indexPath = Context.Server.MapPath("~/IndexData");//索引文档保存位置 FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NativeFSLockFactory()); //IndexReader:对索引库进行读取的类 bool isExist = IndexReader.IndexExists(directory); //是否存在索引库文件夹以及索引库特征文件 if(isExist) { //如果索引目录被锁定(比如索引过程中程序异常退出或另一进程在操作索引库),则解锁 <strong>//Q:存在问题 如果一个用户正在对索引库写操作 此时是上锁的 而另一个用户过来操作时 将锁解开了 于是产生冲突 --解决方法后续</strong> if(IndexWriter.IsLocked(directory)) { IndexWriter.Unlock(directory); } } //创建向索引库写操作对象 IndexWriter(索引目录,指定使用盘古分词进行切词,最大写入长度限制) //补充:使用IndexWriter打开directory时会自动对索引库文件上锁 IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isExist, IndexWriter.MaxFieldLength.UNLIMITED); BooksManager bookManager = new BooksManager(); List<PZYM.Shop.Model.Books> bookList = bookManager.GetModelList(""); //--------------------------------遍历数据源 将数据转换成为文档对象 存入索引库 foreach(var book in bookList) { Document document = new Document(); //new一篇文档对象 --一条记录对应索引库中的一个文档 //向文档中添加字段 Add(字段,值,是否保存字段原始值,是否针对该列创建索引) document.Add(new Field("id", book.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));//--所有字段的值都将以字符串类型保存 因为索引库只存储字符串类型数据 //Field.Store:表示是否保存字段原值。指定Field.Store.YES的字段在检索时才能用document.Get取出原值 //Field.Index.NOT_ANALYZED:指定不按照分词后的结果保存--是否按分词后结果保存取决于是否对该列内容进行模糊查询 document.Add(new Field("title", book.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); //Field.Index.ANALYZED:指定文章内容按照分词后结果保存 否则无法实现后续的模糊查询 //WITH_POSITIONS_OFFSETS:指示不仅保存分割后的词 还保存词之间的距离 document.Add(new Field("content", book.ContentDescription, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); writer.AddDocument(document); //文档写入索引库 } writer.Close();//会自动解锁 directory.Close(); //不要忘了Close,否则索引结果搜不到 } /// <summary> /// 从索引库中检索关键字 /// </summary> private void SearchFromIndexData() { string indexPath = Context.Server.MapPath("~/IndexData"); FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory()); IndexReader reader = IndexReader.Open(directory, true); IndexSearcher searcher = new IndexSearcher(reader); //搜索条件 PhraseQuery query = new PhraseQuery(); //把用户输入的关键字进行分词 foreach(string word in Common.SplitContent.SplitWords(Request.QueryString["SearchKey"])) { query.Add(new Term("content", word)); } //query.Add(new Term("content", "C#"));//多个查询条件时 为且的关系 query.SetSlop(100); //指定关键词相隔最大距离 //TopScoreDocCollector盛放查询结果的容器 TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true); searcher.Search(query, null, collector);//根据query查询条件进行查询,查询结果放入collector容器 //TopDocs 指定0到GetTotalHits() 即所有查询结果中的文档 如果TopDocs(20,10)则意味着获取第20-30之间文档内容 达到分页的效果 ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs; //展示数据实体对象集合 List<PZYM.Shop.Model.Books> bookResult = new List<PZYM.Shop.Model.Books>(); for(int i = 0; i < docs.Length; i++) { int docId = docs[i].doc;//得到查询结果文档的id(Lucene内部分配的id) Document doc = searcher.Doc(docId);//根据文档id来获得文档对象Document PZYM.Shop.Model.Books book = new PZYM.Shop.Model.Books(); book.Title = doc.Get("title"); //book.ContentDescription = doc.Get("content");//未使用高亮 //搜索关键字高亮显示 使用盘古提供高亮插件 book.ContentDescription = Common.SplitContent.HightLight(Request.QueryString["SearchKey"], doc.Get("content")); book.Id = Convert.ToInt32(doc.Get("id")); bookResult.Add(book); } Repeater1.DataSource = bookResult; Repeater1.DataBind(); } } } |
使用的分词方法与关键字变红 SplitContent.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using System.Collections.Generic; using System.IO; using Lucene.Net.Analysis; using Lucene.Net.Analysis.PanGu; using PanGu; namespace Web.Common { public class SplitContent { public static string[] SplitWords(string content) { List<string> strList = new List<string>(); Analyzer analyzer = new PanGuAnalyzer();//指定使用盘古 PanGuAnalyzer 分词算法 TokenStream tokenStream = analyzer.TokenStream("", new StringReader(content)); Lucene.Net.Analysis.Token token = null; while((token = tokenStream.Next()) != null) { //Next继续分词 直至返回null strList.Add(token.TermText()); //得到分词后结果 } return strList.ToArray(); } //需要添加PanGu.HighLight.dll的引用 /// <summary> /// 搜索结果高亮显示 /// </summary> /// <param name="keyword"> 关键字 </param> /// <param name="content"> 搜索结果 </param> /// <returns> 高亮后结果 </returns> public static string HightLight(string keyword, string content) { //创建HTMLFormatter,参数为高亮单词的前后缀 PanGu.HighLight.SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("<font style=\"font-style:normal;color:#cc0000;\"><b>", "</b></font>"); //创建 Highlighter ,输入HTMLFormatter 和 盘古分词对象Semgent PanGu.HighLight.Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new Segment()); //设置每个摘要段的字符数 highlighter.FragmentSize = 1000; //获取最匹配的摘要段 return highlighter.GetBestFragment(keyword, content); } } } |
回到顶部 重点类的说明 Analyzer类:LuceneNet中分词算法的基类 任何自定义算法都需继承它 FSDirectory类: 指定索引库文件存放文件位置 是Directory的子类(它有两个子类 还有一个RAMDirecory,它用来指定将索引库文件存放在内存中) IndexReader:对索引进行读取的类 静态方法bool IndexExists(Directory […]
View Details刚安装完VS2010,不仅启动速度慢,编写代码什么的都慢,卡死!!! 1.禁止VS2010显示启动动画 右键VS2010快捷方式,选择【属性】,在【目标】的后面加上:/nosplash(在exe后面加一个空格再写/nosplash),截图如下: 2.让VS2010启动后,显示空环境。 在VS2010中,打开【工具】—-〉〉〉【选项】—-〉〉〉【环境】—-〉〉〉【启动】,在【启动时】选择【显示空环境】,截图如下: 3.禁止VS2010在启动时,启动外部程序。 在VS2010中,选择【工具】—-〉〉〉【外接程序管理器】,截图如下: 在外接程序管理器中,去掉所有外接程序前面的钩,然后确定即可。截图如下: 4、去掉VS2010视觉体验 老样子,在VS2010中,选择【工具】—-〉〉〉【选项】—-〉〉〉【环境】—-〉〉〉【常规】,在右边找到【视觉体验】, 把视觉体验下面所有的钩给去掉即可。截图如下: 5.禁用【IntelliTrace】 在VS2010中,选择【工具】—-〉〉〉【选项】—-〉〉〉【IntelliTrace】,在右边找到【启用IntelliTrace】,然后去掉其前面的钩 即可。截图如下: 6.在vs2010命令提示符下,执行devenv.exe /resetuserdata //这个方法我没有试过 参考文章:http://blog.csdn.net/kupepoem/article/details/6584667 7.禁用VS2010智能提示,即代码提示功能了,如果你安装了VA助手,这个智能提示是可以关闭的。 如果你没有安装VA,建议还是保留该功能吧。 在VS2010中,选择【工具】—-〉〉〉【选项】—-〉〉〉【文本编辑器】—-〉〉〉【C/C++】—-〉〉〉【高级】,在右边找到 【禁用IntelliSense】,选择True即可。截图如下: from:http://blog.163.com/pinbo_jiankun/blog/static/1335464882013102105055396/
View Details今天写一MVC4+Entity Framework+Mysql的小例子时,发现中文写到数据库里是N个问号(乱码哦~); 于是跟了一下代码,发现页面提交过来的数据正常,这说明肯定是EF写到数据库时出了问题。 为了进一步验证,我用SQLServer2008试了一下,一切正常,那就在Mysql上找原因吧~ 但mysql库编码也是utf8,表也是utf8,这是什么原因呢? 百度了一把,看 了几篇文章也没能解决我的问题,无非都是要把网页、数据库、EF的编码改一致,我的本来都是一致的,难道是字段的编码?但字段的编码怎么改呢?也没找到方法,忽然看到字段的排序项是空的,会不会是它的原因呢?于是改成utf8——测试——一切正常~有图有真相:
View Details在院子里发现 http://www.cnblogs.com/yangecnu/p/3759784.html 模型验证方法 1. 一般方法 繁琐, 无数的if else, 在炎炎夏天,我见过一个验证方法3000行代码的,还要改需求,想必您能了解作为coder当时的心情。 2. 使用第三方框架,功能过于繁琐,还得自己学习,没必要 3. Code Contract 不熟悉,貌似和第三方不同的是:MS提供的,先得高大上一点而已,本质一样 下面的方法,既简单,维护也很方便。代码涉及点: 1) 模型文件代码-添加验证规则,至于你想怎么添加,可以自定义Attribute,或者使用FCL中自带的(本例即是) 2)模型数据操作的Action-在需要验证的Actiond中注入属性或者controller或者全局也行 3)过滤器-添加错误捕捉,处理 维护时,只需要修改各个业务模型中每个字段的验证规则即可 模型建立:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; namespace Model_Validation.Models { public class User { [Required(ErrorMessage = "用户名不能为空")] public string UserName { get; set; } [RegularExpression("[a-z|A-Z|0-9]{6,20}", ErrorMessage = "密码位数太短")] public string UserPassword { get; set; } [DataType(DataType.EmailAddress, ErrorMessage = "邮件格式不正确")] public string EmailAddress { get; set; } [RangeAttribute(1, 1000, ErrorMessage = "评论长度1,1000")] public string Comments { get; set; } } } |
模型数据操作:
1 2 3 4 5 6 |
[HttpPost, ModelValidationFilterAttribute] public JsonResult DoLogin(Models.User User) { return Json(new object(), JsonRequestBehavior.DenyGet); } |
1 |
ModelValidationFilterAttribute:数据验证的过滤器 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class ModelValidationFilterAttribute : FilterAttribute,IActionFilter { // Summary: // Called after the action method executes. // // Parameters: // filterContext: // The filter context. public void OnActionExecuted(ActionExecutedContext filterContext) { } // // Summary: // Called before an action method executes. // // Parameters: // filterContext: // The filter context. public void OnActionExecuting(ActionExecutingContext filterContext) { var _MS = ((Controller)filterContext.Controller).ModelState; if (!_MS.IsValid) { var _FirstErrorField = _MS.FirstOrDefault(); string strHtmlId = _FirstErrorField.Key; string strErrorMessage = _FirstErrorField.Value.Errors.FirstOrDefault().ErrorMessage;//这个数据你想怎么给JS都行. } } } |
from:http://www.cnblogs.com/youlixishi/p/4497462.html
View DetailsMVC 基架不支持 Entity Framework 6 或更高版本。有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=276833。 PS:新做一个小型系统时,在开始打框架的时候的碰到的. 查阅了下,在我们辛勤工作的时候,EF已经升级了从EF5已经更新到了EF6了.NuGet程序包更新的时候直接更新到最新版了. 我的VS2012 最高也才MVC4 所以悲剧的不兼容了. 结论就是 MVC4+EF5 或者 MVC5+EF6 调低版本吧. 步骤如下: 工具- 库程序包管理器 – 程序包管理控制台 先看http://blog.csdn.net/sat472291519/article/details/19114921 博文 1.从NuGet 卸载 ef 6.1 2.修改原语句 Install-Package <程序包名> –Version <版本号> Install-Package EntityFramework –Version 5.0.0 <程序包名>从NuGet管理器中就可以查看 或者在 packages.config 中查看 <版本号>知道就直接填上去 不知道 就需要到官网查 总共出了多少版本 选择自己适用的 最后更新下 匹配的中文语言包 Install-Package EntityFramework.zh-Hans –Version 5.0.0 from:http://blog.csdn.net/sat472291519/article/details/39522993
View DetailsEntity Framework 4.0 也可以支持大名鼎鼎的MySql,这篇POST将向展示如何实现EF+MySql数据库的结构.首先,你必须下载 MySQL Connector/NET 6.3.5 ,也就是.net下连接MySql数据库的驱动程序. 还是像以往一样的,增加一个Entity data model: 将下面选择DataSource, 选择MySQL database 做为数据源. 接下来几步和以前一样,选择要Mapping的Tables: 好了,让我们来测试一下:
1 2 3 4 5 6 7 8 9 10 11 |
using(var context = new MySqlEntities()) { var myEvents = from e in context.Events from a in e.Attendees where a.Person.FirstName == "Gunnar" && a.Person.LastName == "Peipman" select e; Console.WriteLine("My events: "); foreach(var e in myEvents) { Console.WriteLine(e.Title); } } |
可以工作.就是这么简单. 另一个消息是Entity Framework Code-First (CTP5 发布了). 如果您有兴趣可以看一下. from:http://www.cnblogs.com/wintersun/archive/2010/12/12/1903861.html
View Details