三个文件夹,第一个是放置前端部分,第二个是各种支持的类文件,第三个是单元测试文件。

 

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下载:

Linqer.rar

结构可以在这里下载,代码都是不能运行的,主要就是展示下结构

演示结构.rar

 posted on 2014-06-22 11:48  咖啡机(K.F.J)  阅读(1108)  评论(3编辑  收藏  举报