/// <summary> /// 判断数据库中是否存在当前内容,建议改为异步操作 /// 返回参数: /// 存在 返回UserDictionary.Passage /// 不存在返回 null /// </summary> /// <param name="passage"></param> /// <returns></returns> public static UserDictionary.Passage ifExsist(ExReaderPlus.Manage.PassageManager.Passage passage) { using (var db = new DataContext()) { db.Database.Migrate(); string _abstract; _abstract = getAbstract(passage.Content); var passages = db.Passages; //读入内存增加查询速度 db.Database.CloseConnection(); var savePassageInfo = passages //用于传入保存函数的文章信息,主要用来获取数据库自动生成的id .Where(p => p.Name.Equals(passage.HeadName)) .Where(p => p.Abstract.Equals(_abstract)) .Where(p => p.RemainWords.Equals(passage.Content.Length.ToString())) .FirstOrDefault();//通过文章名字和文章摘要查找文章来获取新建的ID return(savePassageInfo); } }
/// <summary> /// 存储文章到书架,并且把文章缓存到路径 /// 传入参数 /// 【1】文章(包含文章内容和文章标题) /// 传出参数 /// 异常 -1 /// 成功 1 /// 有文件、数据库操作,建议异步 /// FIXME TODO /// </summary> /// <param name="passage"></param> /// <returns></returns> public static int SavaPassageInfoAndPassage(ExReaderPlus.Manage.PassageManager.Passage passage) { using (var db = new DataContext()) { var returnPassageInfo = ifExsist(passage); if (returnPassageInfo == null)//如果文章不存在,就新建文章条目 { db.Database.Migrate(); var passageInfo = new UserDictionary.Passage(); passageInfo.Name = passage.HeadName; passageInfo.LastReadTime = System.DateTime.Now;//写入时间 passageInfo.Abstract = getAbstract(passage.Content); passageInfo.RemainWords = passage.Content.Length.ToString(); //C#中int最大为2^32-1不考虑超过的情况 db.Passages.Add(passageInfo);//存入文件信息 try { db.SaveChanges(); } catch { return(-1); } finally { db.Database.CloseConnection(); } db.Database.Migrate(); var savePassageInfo = db.Passages //用于传入保存函数的文章信息,主要用来获取数据库自动生成的id .Where(p => p.Name.Equals(passageInfo.Name)) .Where(p => p.Abstract.Equals(passageInfo.Abstract)).FirstOrDefault(); //通过文章名字和文章摘要查找文章来获取新建的ID ExReaderPlus.PassageIO.PassageIO passageIO = new ExReaderPlus.PassageIO.PassageIO(); try { passageIO.SavaPassage(passage, savePassageInfo);//根据获取的唯一ID保存文件 return(1); } catch { return(-1); } } else { db.Passages.Find(returnPassageInfo.Id).LastReadTime = System.DateTime.Now; try { db.SaveChanges(); return(1); } catch { return(-1); } finally { db.Database.CloseConnection(); } } } }