Attribute定义及EntityMapper


    [AttributeUsage(AttributeTargets.Class)]
public class TableAttribute : Attribute
{
public TableAttribute(string tableName)
{
Name = tableName;
}
public string Name { get; private set; }
}

[AttributeUsage(AttributeTargets.Property)]
public class KeyAttribute : Attribute
{
public KeyAttribute()
: this(false)
{
}

public KeyAttribute(bool isIdentity)
{
IsIdentity = isIdentity;
}

public bool IsIdentity { get; private set; }
}

[AttributeUsage(AttributeTargets.Property)]
public class IgnoreAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Property)]
public class ColumnAttribute : Attribute
{
public ColumnAttribute(string columnName)
{
Name = columnName;
QueryName = columnName;
}

public ColumnAttribute(string columnName, string queryName)
: this(columnName)
{
QueryName = queryName;
}

public string Name { get; private set; }
public string QueryName { get; private set; }
}

要使用TypeInfo的类必须在Entity上标志以上属性,特别是Key属性作为数据库表的主键必须存在,否则以全部字段进行匹配,可能会产生不一致的问题

下面是实体增删改功能的实现


    public static class EntityMapper
{
private static readonly ConcurrentDictionary<RuntimeTypeHandle, TypeInfo> TypeTableInfo = new ConcurrentDictionary<RuntimeTypeHandle, TypeInfo>();
public static T Get<T>(SSGClass.ExpressOpr exp) where T : new()
{
var info = TryGetInfo(typeof(T));
var reader = SSGClass.DBConnect.ServerDb.ExecuteReader(info.SelectText + exp.ToParameters(), exp.Parameters);
if (reader.Read())
{
return info.GenEntity<T>(reader);
}
throw new ExceptionTecnical(string.Format(Global.Consts.OutOfRing, typeof(T).Name));
}

static TypeInfo TryGetInfo(Type type)
{
TypeInfo info;
RuntimeTypeHandle handle = type.TypeHandle;
if (!TypeTableInfo.TryGetValue(handle, out info))
{
info = new TypeInfo(type);
TypeTableInfo[handle] = info;
}
return info;
}

public static List<T> GetList<T>(SSGClass.ExpressOpr exp = null) where T:new()
{
List<T> lst = new List<T>();
var info = TryGetInfo(typeof(T));
System.Data.Common.DbDataReader reader;
if (exp == null)
reader = SSGClass.DBConnect.ServerDb.ExecuteReader(info.SelectText, null);
else
reader = SSGClass.DBConnect.ServerDb.ExecuteReader(info.SelectText + exp.ToParameters(), exp.Parameters);
while (reader.Read())
{
lst.Add(info.GenEntity<T>(reader));
}
return lst;
}

public static int Delete<T>(SSGClass.ExpressOpr exp = null)
{
string deleteText = TryGetInfo(typeof(T)).DeleteText;
if (exp == null)
return SSGClass.DBConnect.ServerDb.ExcuteCommand(deleteText, null);
else
return SSGClass.DBConnect.ServerDb.ExcuteCommand(deleteText + exp.ToParameters(), exp.Parameters);
}

public static int DeleteAll<T>()
{
return Delete<T>();
}

public static int Delete(object entity)
{
var info = TryGetInfo(entity.GetType());
return Delete(info.GetDeleteExpress(entity));
}

public static int Update(object entity)
{
var info = TryGetInfo(entity.GetType());
return SSGClass.DBConnect.ServerDb.ExcuteCommand(info.UpdateText, info.GetEntityPatams(entity));
}

public static int Insert(object entity)
{
var info = TryGetInfo(entity.GetType());
return SSGClass.DBConnect.ServerDb.ExcuteCommand(info.InsertText, info.GetEntityPatams(entity));
}
}

Attribute定义及EntityMapper

时间: 2024-11-05 16:21:23

Attribute定义及EntityMapper的相关文章

《Inside C#》笔记(七) Attribute

Attribute特性可以说是具有开创新的意义,因为一般的语言在被设计出来后,它所具有的能力就已经固定了.而借助Attribute特性,我们可以为C#已有的类型附加信息,既可以在编程时(design-time)附加(如代码描述).也可以附加运行时(run-time)信息(如数据库字段映射).还可以使用Attribute控制代码的行为(如权限检查).Attribute可以提供无限的可能. 一 Attribute的声明 在使用Attribute标签之前,首先要定义它 上面的代码就是Attribute

(转)Attribute在.net编程中的应用

Attribute在.net编程中的应用(一)Attribute的基本概念 经常有朋友问,Attribute是什么?它有什么用?好像没有这个东东程序也能运行.实际上在.Net中,Attribute是一个非常重要的组成部分,为了帮助大家理解和掌握Attribute,以及它的使用方法,特地收集了几个Attribute使用的例子,提供给大家参考. 在具体的演示之前,我想先大致介绍一下Attribute.我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西呢

[转]Attribute在.net编程中的应用

Attribute在.net编程中的应用(一) Attribute的基本概念 经常有朋友问,Attribute是什么?它有什么用?好像没有这个东东程序也能运行.实际上在.Net中,Attribute是一个非常重要的组成部分,为了帮助大家理解和掌握Attribute,以及它的使用方法,特地收集了几个Attribute使用的例子,提供给大家参考. 在具体的演示之前,我想先大致介绍一下Attribute.我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西

dom4j API使用简介

功能简介 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它.在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能.功能和易用性的评测,dom4j无论在那个方面都是非常出色的.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得

再回首Java第二十一天

DOM和SAX解析技术的实现 实现DOM和SAX即系技术的方法有多种,下面列出了常用的几种方法 JAXP(Java API for XML:JAXP是对应用程序隐藏了特定解析器的接口,它提供了访问DOM和SAX实现的抽象层机制 JDOM:JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序,它基于树型结构,利用纯Java的技术对XML文旦实现解析.生成.序列化以及多种操作.JDOM直接为Java编程服务.它利用更为请有力的Java语言的诸多特性(方法重载.集合概念以及樱色),

dom4j

Dom4j是什么DD? dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它.在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能.功能和易用性的评测,dom4j无论在那个方面都是非常出色的.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML

第四章 功能初始化

源代码GitHub:https://github.com/ZhaoRd/Zrd_0001_AuthorityManagement 1.介绍 对于权限管理系统来说,系统模块是必须的一部分,那么如何处理和收集模块信息是一个管家步骤,在没有看郭民峰的osharp之前,我能想到的都是通过管理员通过后台管理进行管理,osharp里采用attirbute的方式采集模块信息.该demo借鉴osharp的方式,通过使用attribute定义模块信息,程序启动时通过判断attribute进行模块和具体功能权限的信

Dom4j和Xpath(转)

1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP. DOM4J使用起来非常简单.只要你了解基本的 XML-DOM 模型,就能使用. Dom:把整个文档作为一个对象. DOM4J 最大的特色是使用大量的接口.它的主要接口都在org.dom4j里面定义: 魂牵梦萦 魂牵梦萦 魂牵梦萦 Attribute 定义了 XML 的属性. Branch 指能够包含子节点的节点

DOM4j解析XML文件

1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP. DOM4J 使用起来非常简单.只要你了解基本的 XML-DOM 模型,就能使用. Dom:把整个文档作为一个对象. DOM4J 最大的特色是使用大量的接口.它的主要接口都在org.dom4j里面定义: Attribute 定义了 XML 的属性. Branch 指能够包含子节点的节点.如XML元素(Eleme