三个文件夹,第一个是放置前端部分,第二个是各种支持的类文件,第三个是单元测试文件。
Core文件类库
放置的是与数据库做交互的文件,以及一些第三方类库,还有与数据库连接的文件
1.Lasy.Validator是一个基于Attribute验证器,我觉得这种验证方式在挺便捷的,具体可以在这里查看到http://www.cnblogs.com/over140/archive/2009/07/04/1515892.html
2.ToJson是一个将数据转换成json格式的字符串的一个类库,很便捷
3.NPinyin是一个将中文转换成拼音的一个类别
app.config是一个连接数据库的配置文件,两个数据库一个是测试用的,一个是调试用的
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="QuyouCore.Properties.Settings.ClubConnectionString"
connectionString="Data Source=192.168.1.214;Initial Catalog=Club;User ID=sa;Password=123456"
providerName="System.Data.SqlClient" />
<add name="QuyouCore.Properties.Settings.ClubTestConnectionString"
connectionString="Data Source=192.168.1.214;Initial Catalog=Club_Test;User ID=sa;Password=123456" />
</connectionStrings>
</configuration>
点击core文件夹进入数据库操作
1.DataAccess
DataAccess中主要就是一些数据库的增删改查操作了
Connection.cs是连接数据的文件,主要根据前端文件夹下面的bin文件中的XML文件来操作是连接哪个数据库,用XML就可以很方便的不重新编译直接换数据库
<?xml version="1.0" encoding="utf-8" ?> <connectionStringToUse> <!-- this value can be Local (pc), Production (server), or Test (test)--> <environment>Production</environment> </connectionStringToUse>
1 using System;
2 using System.Web;
3 using System.Xml;
4 using QuyouCore.Core.Domain;
5 using QuyouCore.Properties;
6
7 namespace QuyouCore.Core.DataAccess.Impl
8 {
9 public class Connection
10 {
11 public Connection()
12 {
13 ConnString = GetCurrentConnectionString();
14 }
15 public ClubDataContext GetClubContext()
16 {
17 var vcd = new ClubDataContext(ConnString);
18 //vcd.Log = new DebuggerWriter();
19 return vcd;
20 }
21 public string GetCurrentConnectionString()
22 {
23 var connString = string.Empty;
24 try
25 {
26 var doc = new XmlDocument();
27 doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/ConnectionStringToUse.xml");
28 var xnl = doc.GetElementsByTagName("environment");
29 var xe = (XmlElement)xnl[0];
30 switch (xe.InnerText.ToLower())
31 {
32 case "local":
33 connString = Settings.Default.ClubConnectionString;
34 break;
35 case "production":
36 connString = Settings.Default.ClubServerConnectionString;
37 break;
38 case "test":
39 connString = Settings.Default.ClubTestConnectionString;
40 break;
41 }
42 }
43 catch (Exception e)
44 {
45 connString = Settings.Default.ClubTestConnectionString;
46 }
47 return connString;
48 }
49
50 public string ConnString
51 {
52 get;
53 set;
54 }
55 }
56 }
BaseRepository.cs文件是做一些通用的Linq查询语句,还有就是写Log操作,将各个查询语句记录下来,便于调试,这里用到的Log工具是log4net
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using QuyouCore.Core.Domain;
using QuyouCore.Core.Enum;
using QuyouCore.Core.Util;
using System;
using System.Linq.Expressions;
namespace QuyouCore.Core.DataAccess.Impl
{
public class BaseRepository
{
protected BaseRepository()
{
Conn = new Connection();
DataContext = new RepositoryContext(Conn.ConnString);
}
#region Properties
/// <summary>
/// Gets or sets the data context.
/// </summary>
/// <value>The data context.</value>
private RepositoryContext DataContext { get; set; }
protected Connection Conn { get; set; }
#endregion
#region Entity and metadata functions
/// <summary>
/// 分页
/// </summary>
protected DataPageList<TEntity> GetEntitiesByPage<TEntity>(IQueryable query, int page, int size, DataContext context)
{
context.Log = FileLog.Out;
var data = DataPageList<TEntity>.Create<TEntity>(query, page, size);
WriteLog(FileLog.FileInfo.ToString());
return data;
}
/// <summary>
/// 根据条件获取一条数据
/// </summary>
protected TEntity GetEntity<TEntity>(Expression<Func<TEntity, bool>> queryFunc) where TEntity : class //Entity
{
DataContext.Log = FileLog.Out;
var results = from entity in DataContext.GetTable<TEntity>()
select entity;
results = results.Where(queryFunc);
var result = results.FirstOrDefault();
WriteLog(FileLog.FileInfo.ToString());
return result;
}
/// <summary>
/// 根据条件获取数据信息列
/// </summary>
protected List<TEntity> GetEntities<TEntity>(Expression<Func<TEntity, bool>> queryFunc) where TEntity : class //Entity
{
DataContext.Log = FileLog.Out;
var query = from entity in DataContext.GetTable<TEntity>()
select entity;
query = query.Where(queryFunc);
var results = query.ToList();
WriteLog(FileLog.FileInfo.ToString());
return results;
}
protected List<TEntity> GetEntities<TEntity>(IQueryable<TEntity> query) where TEntity : class //Entity
{
DataContext.Log = FileLog.Out;
var results = query.ToList();
WriteLog(FileLog.FileInfo.ToString());
return results;
}
protected IQueryable<TEntity> GetQueryEntities<TEntity>(Expression<Func<TEntity, bool>> queryFunc) where TEntity : class //Entity
{
var query = from entity in DataContext.GetTable<TEntity>()
select entity;
return query.Where(queryFunc);
}
/// <summary>
/// 获取所有数据
/// </summary>
protected List<TEntity> GetEntities<TEntity>() where TEntity : class //Entity
{
DataContext.Log = FileLog.Out;
var query = from entity in DataContext.GetTable<TEntity>()
select entity;
var results = query.ToList();
WriteLog(FileLog.FileInfo.ToString());
return results;
}
#endregion
protected void WriteLog(string log)
{
WriteLog(log, EnumLog.Level.Info);
}
protected void WriteLog(string log, EnumLog.Level level)
{
switch (level)
{
case EnumLog.Level.Debug:
LogHelper.GetInstance().Debug(log);
break;
case EnumLog.Level.Error:
LogHelper.GetInstance().Error(log);
break;
case EnumLog.Level.Warn:
LogHelper.GetInstance().Warn(log);
break;
case EnumLog.Level.Fatal:
LogHelper.GetInstance().Fatal(log);
break;
case EnumLog.Level.Info:
LogHelper.GetInstance().Info(log);
break;
default:
LogHelper.GetInstance().Info(log);
break;
}
//LogHelper.GetInstance().Logger.Repository.Shutdown();
}
}
}
下面的代码是一些简单的增删改查,但是一些比较难的SQL语句,有时候比较棘手,你可以使用一个翻译工具,将SQL转换成,叫做Linqer,使用操作也很简单,操作界面如图。
using System.Collections.Generic;
using System.Linq;
using QuyouCore.Core.Domain;
namespace QuyouCore.Core.DataAccess.Impl
{
public class KeywordRepository : BaseRepository, IKeywordRepository
{
public int Insert(tb_Keyword data)
{
using (var cd = Conn.GetClubContext())
{
cd.tb_Keyword.InsertOnSubmit(data);
cd.SubmitChanges();
return data.KeywordTypeId;
}
}
/// <summary>
/// 根据主键更新表内容
/// </summary>
public void Update(tb_Keyword data)
{
using (var cd = Conn.GetClubContext())
{
var update = cd.tb_Keyword.Single(t => t.KeywordId == data.KeywordId);
update.KeywordTypeId = data.KeywordTypeId;
update.Name = data.Name;
update.Pinyin = data.Pinyin;
cd.SubmitChanges();
}
}
/// <summary>
/// 根据编号将信息更新为删除状态
/// </summary>
public void Delete(int id)
{
using (var cd = Conn.GetClubContext())
{
var update = cd.tb_Keyword.Single(t => t.KeywordId == id);
update.Active = false;
cd.SubmitChanges();
}
}
public List<tb_Keyword> GetKeywordsByTypeId(tb_Keyword data)
{
return GetEntities<tb_Keyword>(
t => t.Active == data.Active &&
t.KeywordTypeId == data.KeywordTypeId
);
}
}
}
2.Domain
Domain文件里面的Club.dml内容是自动生成的
在这里面还放了一些,数据库表格的扩展字段以及一个分页类DataPageList.cs
namespace QuyouCore.Core.Domain
{
public partial class tb_Keyword
{
//public static readonly string TableName = "tb_Keyword";
//public static readonly string ColumnKeywordId = "KeywordId";
//public static readonly string ColumnKeywordTypeId = "KeywordTypeId";
//public static readonly string ColumnName = "Name";
//public static readonly string ColumnAddTime = "AddTime";
}
}
1 using System.Collections;
2 using System.Collections.Generic;
3 using System.Linq;
4
5 namespace QuyouCore.Core.Domain
6 {
7 /// <summary>
8 /// 数据列表
9 /// </summary>
10 /// <typeparam name="T">类型</typeparam>
11 public class DataPageList<T> : IEnumerable
12 {
13 #region 成员变量
14
15 private System.Linq.IQueryable<T> query;
16 private int allRecordCount;
17 private int thisPageRecordCount;
18 private int pageSize;
19 private int pageCount;
20 private int indexPage;
21 private bool canFirstPage;
22 private bool canPrevPage;
23 private bool canNextPage;
24 private bool canLastpage;
25 private List<T> listValue;
26
27 #endregion
28
29
30 #region 构造函数
31
32 //私有构造函数,只能通过内部构造
33 private DataPageList(System.Linq.IQueryable<T> Query, int IndexPage, int PageSize)
34 {
35 query = Query;
36 indexPage = IndexPage;
37 pageSize = PageSize;
38 PageAttrList = new List<PageAttr>();
39 Update();
40 }
41
42 private DataPageList(System.Linq.IQueryable<T> Query)
43 : this(Query, 1, 0)
44 {
45 }
46
47 #endregion
48
49
50 #region 属性
51
52 public int AllRecordCount
53 {
54 get { return allRecordCount; }
55 }
56
57 public int ThisPageRecordCount
58 {
59 get { return thisPageRecordCount; }
60 }
61
62 public int PageSize
63 {
64 get { return pageSize; }
65 set { pageSize = value; }
66 }
67
68 public int PageCount
69 {
70 get { return pageCount; }
71 }
72
73 public int IndexPage
74 {
75 get { return indexPage; }
76 set { indexPage = value; }
77 }
78
79 public bool CanFirstPage
80 {
81 get { return canFirstPage; }
82 }
83
84 public bool CanPrevPage
85 {
86 get { return canPrevPage; }
87 }
88
89 public bool CanNextPage
90 {
91 get { return canNextPage; }
92 }
93
94 public bool CanLastPage
95 {
96 get { return canLastpage; }
97 }
98
99 public List<T> Value
100 {
101 get { return listValue; }
102 }
103
104 public class PageAttr
105 {
106 public int Page { get; set; }
107 }
108
109 public List<PageAttr> PageAttrList
110 {
111 get; set;
112 }
113 #endregion
114
115 #region 索引器
116
117 public T this[int index]
118 {
119 get { return listValue[index]; }
120 set { listValue[index] = value; }
121 }
122
123 #endregion
124
125 #region 公开方法
126
127 /**/
128
129 /// <summary>
130 /// 创建自身实例
131 /// </summary>
132 /// <typeparam name="N">类型,如果此处为匿名类型,请用var 定义实体,且类后的T为object(其实什么也不重要,只是用于可以调用当前类的静态方法)</typeparam>
133 /// <param name="Query">Linq查询语句</param>
134 /// <param name="type">元素类型</param>
135 /// <param name="IndexPage">开始页</param>
136 /// <param name="PageSize">每页大小</param>
137 /// <returns></returns>
138 public static DataPageList<N> Create<N>(System.Linq.IQueryable Query, int IndexPage, int PageSize)
139 {
140 System.Linq.IQueryable<N> query = (System.Linq.IQueryable<N>) Query;
141 return new DataPageList<N>(query, IndexPage, PageSize);
142 }
143
144 //public static DataPageList<N> Create<N>(System.Linq.IQueryable Query, int IndexPage, int PageSize)
145 //{
146 // return Create<N>(Query, IndexPage, PageSize);
147 //}
148
149 /**/
150
151 /// <summary>
152 /// 更新数据
153 /// </summary>
154 public virtual void Update()
155 {
156 allRecordCount = query.Count();
157 PageAttrList.Clear();
158 if (pageSize > 0)
159 {
160 query = query.Skip((indexPage - 1) * pageSize).Take(pageSize);
161 thisPageRecordCount = query.Count();
162 //计算分页结果
163 pageCount = (allRecordCount%pageSize == 0) ? (allRecordCount/pageSize) : allRecordCount/pageSize + 1;
164 if (indexPage > 1) canFirstPage = true;
165 canPrevPage = true;
166 if (indexPage < pageCount) canNextPage = true;
167 canLastpage = true;
168 }
169 else
170 {
171 thisPageRecordCount = allRecordCount;
172 pageCount = indexPage = 1;
173 canFirstPage = canPrevPage = canNextPage = canLastpage = false;
174 }
175 for (var cur = 1; cur <= pageCount; cur++)
176 {
177 PageAttrList.Add(new PageAttr {Page = cur});
178 }
179 listValue = query.ToList();
180 }
181
182 /**/
183
184 /// <summary>
185 /// 实现枚举接口,不过返回的是object
186 /// </summary>
187 /// <returns></returns>
188 public IEnumerator GetEnumerator()
189 {
190 return listValue.GetEnumerator();
191 }
192
193 #endregion
194 }
195 }
3.Entity
这里面打算放的是一些额外的数据字段,例如一些方法的参数集合、公共的JSON返回格式等
Prompt.cs就是返回JSON格式的
1 using System.Collections.Generic;
2 using LitJson;
3 namespace QuyouCore.Core.Entity
4 {
5 public class Prompt
6 {
7 public int Number
8 {
9 get; set;
10 }
11
12 public string Msg
13 {
14 get;
15 set;
16 }
17
18 public static string ToJson(int number, string msg)
19 {
20 var prompt = new Prompt {Number = number, Msg = msg};
21 return JsonMapper.ToJson(prompt);
22 }
23
24 public static string ToJson<T>(int number, string msg, List<T> data)
25 {
26 var prompt = new PromptTemplate<T> { Number = number, Msg = msg, DataList = data };
27 return JsonMapper.ToJson(prompt);
28 }
29 }
30 }
4.Enum
这里放的是一些数据字典
namespace QuyouCore.Core.Enum
{
public class EnumLog
{
public enum Level
{
Fatal = 1,
Error = 2,
Warn = 3,
Debug = 4,
Info = 5
}
}
}
5.Service
这里面放了一些业务逻辑,比如根据条件查询等,因为打算在API、Web、Wap上面共用代码,所以就想把一些通用的逻辑整合在一起,这里用到了一种单例模式,使用的工具是StructureMap
1 using System.Collections.Generic;
2 using Lasy.Validator;
3 using QuyouCore.Core.Entity;
4 using QuyouCore.Core.Enum;
5 using StructureMap;
6
7 namespace QuyouCore.Core.Service.Impl
8 {
9 public abstract class BaseService
10 {
11 protected abstract IContainer ConfigureDependencies();//单例配置化
12
13 protected string PromptToJson(int prompt)
14 {
15 return Prompt.ToJson(prompt, EnumCommon.GetPrompt()[prompt]);
16 }
17
18 protected string PromptToJson<T>(int prompt, List<T> dataList)
19 {
20 return Prompt.ToJson(prompt, EnumCommon.GetPrompt()[prompt], dataList);
21 }
22
23 /// <summary>
24 /// 用Attribute做字段验证
25 /// </summary>
26 /// <typeparam name="T"></typeparam>
27 /// <param name="dict"></param>
28 /// <returns></returns>
29 protected string ValidateParameters<T>(Dictionary<string, object> dict)
30 {
31 var validator = new Validator(typeof(T));
32 if (!validator.Validate(dict).BoolResult)
33 {
34 return validator.Validate(dict).ErrorStringWithoutFormat;
35 }
36 return string.Empty;
37 }
38 }
39 }
1 using System.Collections.Generic;
2 using QuyouCore.Core.DataAccess;
3 using QuyouCore.Core.DataAccess.Impl;
4 using QuyouCore.Core.Domain;
5 using StructureMap;
6 using QuyouCore.Core.Util;
7 namespace QuyouCore.Core.Service.Impl
8 {
9 public class KeywordService : BaseService, IKeywordService
10 {
11 protected override IContainer ConfigureDependencies()
12 {
13 return new Container(x =>
14 {
15 x.For<IKeywordTypeRepository>().Use<KeywordTypeRepository>();
16 x.For<IKeywordRepository>().Use<KeywordRepository>();
17 });
18 }
19 private IKeywordTypeRepository InitKeywordTypeRepository()
20 {
21 var container = ConfigureDependencies();
22 return container.GetInstance<IKeywordTypeRepository>();
23 }
24 private IKeywordRepository InitKeywordRepository()
25 {
26 var container = ConfigureDependencies();
27 return container.GetInstance<IKeywordRepository>();
28 }
29
30 public string Insert(tb_Keyword data)
31 {
32 var keywordRepository = InitKeywordRepository();
33 var result = keywordRepository.Insert(data);
34 return PromptToJson(result > 0 ? Const.PromptSuccess : Const.PromptFailure);
35 }
36
37 public string Update(tb_Keyword data)
38 {
39 var keywordRepository = InitKeywordRepository();
40 keywordRepository.Update(data);
41 return PromptToJson(Const.PromptSuccess);
42 }
43
44 public string Delete(int id)
45 {
46 var keywordRepository = InitKeywordRepository();
47 keywordRepository.Delete(id);
48 return PromptToJson(Const.PromptSuccess);
49 }
50
51 public string GetSelectedKeywords(tb_KeywordType data)
52 {
53 var typeRepository = InitKeywordTypeRepository();
54 var keywordRepository = InitKeywordRepository();
55
56 data.Active = true;
57 data.ParentTypeId = 0;
58 //根据线路类型 版块 类别查询出关键字类别
59 var allTypes = new List<tb_KeywordType>(); //一级 二级的关键字类别 现在只分到二级 TODO
60 var types = typeRepository.GetSelectedTypesByParentId(data);
61 foreach (var tbKeywordType in types)
62 {
63 allTypes.Add(tbKeywordType);
64 data.ParentTypeId = tbKeywordType.KeywordTypeId;
65 var children = typeRepository.GetSelectedTypesByParentId(data);
66 if (children.Count <= 0) continue;
67 allTypes.AddRange(children);
68 }
69
70 //查询关键字内容
71 //var allKeywords = new List<tb_Keyword>();
72 var allKeywords = new List<tb_KeywordType>();
73 var condition = new tb_Keyword {Active = true};
74 foreach (var tbKeywordType in allTypes)
75 {
76 //allKeywords.Add(new tb_Keyword
77 //{
78 // KeywordTypeName = tbKeywordType.Name,
79 // IsKeywordType = true,
80 // Pinyin = string.Empty,
81 // Name = string.Empty
82 //});
83 condition.KeywordTypeId = tbKeywordType.KeywordTypeId;
84 var keywords = keywordRepository.GetKeywordsByTypeId(condition);
85 if (keywords.Count <= 0)
86 {
87 allKeywords.Add(tbKeywordType);
88 continue;
89 }
90 tbKeywordType.Keywords = keywords;
91 allKeywords.Add(tbKeywordType);
92 }
93 return PromptToJson(Const.PromptSuccess, allKeywords);
94 }
95 }
96 }
6.Util
主要放些小工具类,比如Log写工具、cookie操作、图片压缩类等
Tests文件类库
健壮的代码是需要有单元测试来做保障的,所以单元测试必不可少。用到的工具是NUnit,测试的点可以发挥大家的想象力。怎么测都行。
1 using System;
2 using NUnit.Framework;
3 using QuyouCore.Core.DataAccess;
4 using QuyouCore.Core.DataAccess.Impl;
5 using QuyouCore.Core.Domain;
6 using StructureMap;
7
8 namespace QuyouTests.core.DataAccess
9 {
10 [TestFixture]
11 public class KeywordRepositoryTest
12 {
13 private IKeywordRepository _keywordModel;
14
15 [TestFixtureSetUp]
16 public void Init()
17 {
18 var container = new Container(x => x.For<IKeywordRepository>().Use<KeywordRepository>());
19 _keywordModel = container.GetInstance<IKeywordRepository>();
20 }
21
22 [Test]
23 public void TestInsert()
24 {
25 var data = new tb_Keyword
26 {
27 KeywordTypeId = 1,
28 Name = "塔里木",
29 AddTime = DateTime.Now,
30 Pinyin = "talimu",
31 Active = true
32 };
33 var result = _keywordModel.Insert(data);
34 Assert.Greater(result, 0);
35 }
36
37 [Test]
38 public void TestUpdate()
39 {
40 var data = new tb_Keyword
41 {
42 KeywordId = 1,
43 KeywordTypeId = 2,
44 Name = "莫干山",
45 Pinyin = "moganshan"
46 };
47 _keywordModel.Update(data);
48 }
49
50 [Test]
51 public void TestDelete()
52 {
53 _keywordModel.Delete(1);
54 }
55 }
56 }
Quyou文件夹
这里就是与页面操作的代码,脚本、CSS等都在里面
Presenter文件夹里面的类是用于操作界面逻辑,以及过滤传过来的数据
1 using System;
2 using NPinyin;
3 using Quyou.admin.Interface;
4 using QuyouCore.Core.Domain;
5 using QuyouCore.Core.Entity;
6 using QuyouCore.Core.Service;
7 using QuyouCore.Core.Service.Impl;
8 using QuyouCore.Core.Util;
9 using StructureMap;
10 using System.Collections.Generic;
11
12 namespace Quyou.admin.Presenter
13 {
14 public class KeywordAjaxPresenter : BasePresenter, IKeywordAjaxPresenter
15 {
16 protected override IContainer ConfigureDependencies()
17 {
18 return new Container(x =>
19 {
20 x.For<IKeywordTypeService>().Use<KeywordTypeService>();
21 x.For<IKeywordService>().Use<KeywordService>();
22 });
23 }
24
25 private IKeywordTypeService InitKeywordTypeService()
26 {
27 var container = ConfigureDependencies();
28 return container.GetInstance<IKeywordTypeService>();
29 }
30
31 private IKeywordService InitKeywordService()
32 {
33 var container = ConfigureDependencies();
34 return container.GetInstance<IKeywordService>();
35 }
36
37 private string ValidInsertOrUpdate(KeywordTypetData input)
38 {
39 input.PlayClass = FilterParamters(input.PlayClass);
40 input.PlayModel = FilterParamters(input.PlayModel);
41 input.PlayType = FilterParamters(input.PlayType);
42 input.Name = FilterParamters(input.Name);
43 input.Sort = FilterParamters(input.Sort);
44 input.ParentTypeId = FilterParamters(input.ParentTypeId);
45 var dict = new Dictionary<string, object>
46 {
47 {"PlayClass", input.PlayClass},
48 {"PlayModel", input.PlayModel},
49 {"PlayType", input.PlayType},
50 {"Name", input.Name},
51 {"Sort", input.Sort},
52 {"ParentTypeId", input.ParentTypeId}
53 };
54 if (!string.IsNullOrEmpty(input.KeywordTypeId))
55 {
56 input.KeywordTypeId = FilterParamters(input.KeywordTypeId);
57 dict.Add("KeywordTypeId", input.KeywordTypeId);
58 }
59 return ValidateParameters<KeywordTypetData>(dict);
60 }
61 public string InsertKeywordType(KeywordTypetData input)
62 {
63 var valid = ValidInsertOrUpdate(input);
64 if (valid.Length > 0)
65 return valid;
66
67 var keywordType = new tb_KeywordType
68 {
69 PlayClass = int.Parse(input.PlayClass),
70 PlayModel = int.Parse(input.PlayModel),
71 PlayType = int.Parse(input.PlayType),
72 Name = input.Name,
73 AddTime = DateTime.Now,
74 Sort = int.Parse(input.Sort),
75 ParentTypeId = int.Parse(input.ParentTypeId),
76 Active = true
77 };
78
79 var keywordTypeService = InitKeywordTypeService();
80 return keywordTypeService.Insert(keywordType);
81 }
82
83 /// <summary>
84 /// 修改关键字类别
85 /// </summary>
86 /// <param name="input"></param>
87 /// <returns></returns>
88 public string EditKeywordType(KeywordTypetData input)
89 {
90 var valid = ValidInsertOrUpdate(input);
91 if (valid.Length > 0)
92 return valid;
93
94 var keywordType = new tb_KeywordType
95 {
96 KeywordTypeId = int.Parse(input.KeywordTypeId),
97 PlayClass = int.Parse(input.PlayClass),
98 PlayModel = int.Parse(input.PlayModel),
99 PlayType = int.Parse(input.PlayType),
100 Name = input.Name,
101 Sort = int.Parse(input.Sort),
102 ParentTypeId = int.Parse(input.ParentTypeId)
103 };
104
105 var keywordTypeService = InitKeywordTypeService();
106 return keywordTypeService.Update(keywordType);
107 }
108
109 /// <summary>
110 /// 删除关键字类别
111 /// </summary>
112 /// <param name="input"></param>
113 /// <returns></returns>
114 public string DelKeywordType(KeywordTypetData input)
115 {
116 input.KeywordTypeId = FilterParamters(input.KeywordTypeId);
117 var dict = new Dictionary<string, object>
118 {
119 {"KeywordTypeId", input.KeywordTypeId}
120 };
121 var valid = ValidateParameters<KeywordTypetData>(dict);
122 if (valid.Length > 0)
123 return valid;
124 var keywordTypeService = InitKeywordTypeService();
125 return keywordTypeService.Delete(int.Parse(input.KeywordTypeId));
126 }
127
128 /// <summary>
129 /// 添加关键字
130 /// </summary>
131 /// <param name="input"></param>
132 /// <returns></returns>
133 public string InsertKeyword(KeywordtData input)
134 {
135 input.KeywordTypeId = FilterParamters(input.KeywordTypeId);
136 input.Name = FilterParamters(input.Name);
137
138 var dict = new Dictionary<string, object>
139 {
140 {"KeywordTypeId", input.KeywordTypeId},
141 {"Name", input.Name}
142 };
143 var valid = ValidateParameters<KeywordtData>(dict);
144 if (valid.Length > 0)
145 return valid;
146
147 var keyword = new tb_Keyword
148 {
149 KeywordTypeId = int.Parse(input.KeywordTypeId),
150 Name = input.Name,
151 AddTime = DateTime.Now,
152 Pinyin = Pinyin.GetPinyin(input.Name),
153 Active = true
154 };
155
156 var keywordService = InitKeywordService();
157 return keywordService.Insert(keyword);
158 }
159
160 /// <summary>
161 /// 修改关键字
162 /// </summary>
163 /// <param name="input"></param>
164 /// <returns></returns>
165 public string EditKeyword(KeywordtData input)
166 {
167 input.KeywordId = FilterParamters(input.KeywordId);
168 input.KeywordTypeId = FilterParamters(input.KeywordTypeId);
169 input.Name = FilterParamters(input.Name);
170
171 var dict = new Dictionary<string, object>
172 {
173 {"KeywordTypeId", input.KeywordTypeId},
174 {"Name", input.Name},
175 {"KeywordId", input.KeywordId}
176 };
177 var valid = ValidateParameters<KeywordtData>(dict);
178 if (valid.Length > 0)
179 return valid;
180
181 var keyword = new tb_Keyword
182 {
183 KeywordId = int.Parse(input.KeywordId),
184 KeywordTypeId = int.Parse(input.KeywordTypeId),
185 Name = input.Name,
186 Pinyin = Pinyin.GetPinyin(input.Name),
187 };
188
189 var keywordService = InitKeywordService();
190 return keywordService.Update(keyword);
191 }
192
193 /// <summary>
194 /// 删除关键字
195 /// </summary>
196 /// <param name="input"></param>
197 /// <returns></returns>
198 public string DelKeyword(KeywordtData input)
199 {
200 input.KeywordId = FilterParamters(input.KeywordId);
201 var dict = new Dictionary<string, object>
202 {
203 {"KeywordId", input.KeywordId}
204 };
205 var valid = ValidateParameters<KeywordtData>(dict);
206 if (valid.Length > 0)
207 return valid;
208 var keywordService = InitKeywordService();
209 return keywordService.Delete(int.Parse(input.KeywordId));
210 }
211
212 /// <summary>
213 /// 获取关键字列表
214 /// </summary>
215 /// <param name="input"></param>
216 /// <returns></returns>
217 public string GetKeywords(KeywordTypetData input)
218 {
219 int playClass, playModel, playType;
220 int.TryParse(input.PlayClass, out playClass);
221 int.TryParse(input.PlayModel, out playModel);
222 int.TryParse(input.PlayType, out playType);
223 var keywordType = new tb_KeywordType
224 {
225 PlayClass = playClass,
226 PlayModel = playModel,
227 PlayType = playType
228 };
229 var keywordService = InitKeywordService();
230 return keywordService.GetSelectedKeywords(keywordType);
231 }
232
233 /// <summary>
234 /// 显示错误信息的JSON提示
235 /// </summary>
236 /// <returns></returns>
237 public string ShowErrorJson()
238 {
239 return PromptToJson(Const.PromptFailure);
240 }
241 }
242 }
Linqer下载:
结构可以在这里下载,代码都是不能运行的,主要就是展示下结构
浙公网安备 33010602011771号