看到有同学反馈,说MiniORM代码有Bug,也不知道怎么用,所以今天我就写了些测试代码。希望能够给点帮助。
同时也发现了两Bug,一并罗列出:
1、MiniORM.PubFuncs.GetObjectType()函数:
-
publicstaticTypeGetObjectType(stringassemblyname,stringnamespacename,stringclassname)
- {
- TypeobjType=(Type)_HashObjectType[assemblyname+namespacename+classname];
-
if(objType==null)
- {
-
objectobj=_HashObjectType[assemblyname+namespacename+classname];
-
obj=Assembly.Load(assemblyname).CreateInstance(namespacename+"."+classname);
- _HashObjectType[assemblyname+namespacename+classname]=obj.GetType();
-
- objType=(Type)_HashObjectType[assemblyname+namespacename+classname];
- }
-
returnobjType;
- }
2、MiniORM.OrmWriter.CheckValidate()函数:
-
publicvoidCheckValidate(objectModelObject)
- {
- PropertyInfo[]infos=ModelObject.GetType().GetProperties();
-
object[]CustomerAttributes=null;
-
object[]CustomerAttributes1=null;
-
-
stringstrSQL="SELECTIDFROM{0}WHERE{1}";
-
stringstrTablename=PubFuncs.GetTableName(ModelObject);
-
stringstrWOA="";
-
stringstrWHERE="";
-
stringstrFieldMessage="";
-
foreach(PropertyInfoinfoininfos)
- {
-
CustomerAttributes=info.GetCustomAttributes(typeof(MiniORMAttribute.DataFieldNotDoubleAttribute),false);
-
CustomerAttributes1=info.GetCustomAttributes(typeof(MiniORMAttribute.DataFieldAttribute),false);
-
if(CustomerAttributes!=null&&CustomerAttributes1!=null)
- {
-
for(inti=0;i<CustomerAttributes.Length;i++)
- {
-
strWHERE+=strWOA+((MiniORMAttribute.DataFieldAttribute)CustomerAttributes1[0]).FieldName+"='"+info.GetValue(ModelObject,null)+"'";
- strFieldMessage+=((MiniORMAttribute.DataFieldAttribute)CustomerAttributes1[0]).FieldName;
-
strWOA="OR";
- }
- }
- }
-
-
if(strWHERE.Trim()!="")
- {
-
strSQL=string.Format(strSQL,newstring[]{strTablename,strWHERE});
-
using(SqlConnectionconn=newSqlConnection(PubFuncs.ConnectionStr))
- {
- conn.Open();
-
SqlCommandcmd=newSqlCommand();
- cmd.Connection=conn;
- cmd.CommandType=CommandType.Text;
- cmd.CommandText=strSQL;
-
using(SqlDataReaderrdr=cmd.ExecuteReader())
- {
-
if(rdr.Read())
- {
-
thrownewException("下列字段值不能重复:"+strFieldMessage);
- }
- }
- }
- }
- }
测试代码如下:
首先是类关系图:
数据库表:
Person表:
Hand表:
Head表:
测试代码如下:
下面是类代码:
-
[DataObjectAttribute("Person","ID","")]
-
publicclassPerson
- {
-
privateint_ID;
-
privatestring_Name;
-
privateint_Age;
-
privatestring_Sex;
-
privateHead_Head;
-
privateHand_LeftHand;
-
privateHand_RightHand;
-
[DataFieldAttribute("ID",true)]
-
publicintID
- {
-
get{return_ID;}
-
set{_ID=value;}
- }
-
[SubDataObjectAttribute(SubDataObjectFieldType.Object,"MiniORM","MiniORM","Head")]
-
publicHeadHead
- {
-
get{return_Head;}
-
set{_Head=value;}
- }
-
[SubDataObjectAttribute(SubDataObjectFieldType.Object,"MiniORM","MiniORM","Hand")]
-
publicHandLeftHand
- {
-
get{return_LeftHand;}
-
set{_LeftHand=value;}
- }
-
[SubDataObjectAttribute(SubDataObjectFieldType.Object,"MiniORM","MiniORM","Hand")]
-
publicHandRightHand
- {
-
get{return_RightHand;}
-
set{_RightHand=value;}
- }
-
[DataFieldAttribute("name","NvarChar")]
-
publicstringName
- {
-
get{returnthis._Name;}
-
set{this._Name=value;}
- }
-
[DataFieldAttribute("age","int")]
-
publicintAge
- {
-
get{returnthis._Age;}
-
set{this._Age=value;}
- }
-
[DataFieldAttribute("sex","NvarChar")]
-
publicstringSex
- {
-
get{returnthis._Sex;}
-
set{this._Sex=value;}
- }
-
publicHandHand
- {
-
get
- {
-
thrownewSystem.NotImplementedException();
- }
-
set
- {
- }
- }
-
publicHeadHead1
- {
-
get
- {
-
thrownewSystem.NotImplementedException();
- }
-
set
- {
- }
- }
- }
-
[DataObjectAttribute("Hand","ID","PersonID")]
-
publicclassHand
- {
-
privateint_ID;
-
privateint_PersonID;
-
privatestring_Name;
-
[DataFieldAttribute("ID",true)]
-
publicintID
- {
-
get{returnthis._ID;}
-
set{this._ID=value;}
- }
-
[DataFieldAttribute("PersonID")]
-
publicintPersonID
- {
-
get{returnthis._PersonID;}
-
set{this._PersonID=value;}
- }
-
[DataFieldAttribute("name","NvarChar")]
-
publicstringName
- {
-
get{return_Name;}
-
set{_Name=value;}
- }
- }
-
[DataObjectAttribute("Head","ID","PersonID")]
-
publicclassHead
- {
-
privateint_ID;
-
privateint_PersonID;
-
privatestring_Name;
-
[DataFieldAttribute("ID",true)]
-
publicintID
- {
-
get{returnthis._ID;}
-
set{this._ID=value;}
- }
-
[DataFieldAttribute("PersonID")]
-
publicintPersonID
- {
-
get{returnthis._PersonID;}
-
set{this._PersonID=value;}
- }
-
[DataFieldAttribute("name","NvarChar")]
-
publicstringName
- {
-
get{return_Name;}
-
set{_Name=value;}
- }
- }
下面是测试代码:
- [STAThread]
-
staticvoidMain()
- {
-
- WriteTest();
-
- ReadTest();
- }
-
privatestaticvoidWriteTest()
- {
-
Personperson=newPerson();
-
person.Name="snoopy";
- person.Age=5;
-
person.Sex="male";
-
Handlefthand=newHand();
-
lefthand.Name="左手";
-
Handrighthand=newHand();
-
righthand.Name="右手";
-
Headhead=newHead();
-
head.Name="大笨脑袋";
- person.LeftHand=lefthand;
- person.RightHand=righthand;
- person.Head=head;
-
MiniORM.OrmWriterwrite=newOrmWriter();
- write.Write(person);
- }
-
privatestaticvoidReadTest()
- {
-
MiniORM.OrmReaderreader=newOrmReader();
-
Personperson=(Person)reader.Read(newPerson(),1);
-
Console.WriteLine("person.Name:"+person.Name);
-
Console.WriteLine("person.Age:"+person.Age);
-
Console.WriteLine("person.Sex:"+person.Sex);
-
Console.WriteLine("LeftHand.Name:"+person.LeftHand.Name);
-
Console.WriteLine("RightHand.Name:"+person.RightHand.Name);
-
Console.WriteLine("Head.Name:"+person.Head.Name);
- Console.Read();
- }
ReadTest的测试结果如:
好了,各位,你可以使用这个调试代码来试试了。。。
相关文章:
C#基础系列:实现自己的ORM(ORM的基础概念)
C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)
C#基础系列:实现自己的ORM(构造我自己的ORM)
源代码下载
分享到:
相关推荐
本资源“C#实现自己的ORM系列源码(MiniORM).rar”提供了这样一个学习和实践的机会。它包含了一个名为MiniORM的简单ORM框架的源代码,以及一个解决方案文件MiniORM.sln,用于在Visual Studio中编译和运行项目。此外,...
ORM,全称Object-Relational Mapping,即对象关系映射,是一种编程技术...通过对这个轻量级ORM类库源代码的学习,开发者不仅可以提升自己的C#技能,还能深入理解ORM的工作原理,为实际项目开发中的数据库操作提供便利。
这是我Blog(http://blog.csdn.net/RonoTian)中的系列文章《实现自己的ORM》系列的配套资源,如果你需要详细的了解MiniORM的相关实现,那请自己查看我Blog中相关文章。
【C#项目实例: 项目测试分配系统】 在软件开发过程中,测试是至关重要的环节,它确保了产品的质量和稳定性。本项目是一个C#编写的项目测试分配系统,旨在帮助毕业设计的学生以及专业程序员进行有效、有序的测试工作...
Maven坐标:org.springframework:spring-orm:5.0.8.RELEASE; 标签:springframework、spring、orm、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...
标题提到的"C# ORM程序"是指基于C#语言实现的ORM框架,它可能包含一系列类库和工具,用于与多种类型的数据库(MySQL, SQLite, SQLServer, Oracle, Access)进行交互。ORM工具的核心功能包括但不限于数据查询、事务...
标题中的"C# Sqlite ORM"指的是使用C#编程语言实现的SQLite对象关系映射(ORM)框架。ORM是一种编程技术,它允许开发者使用面向对象的方式来操作数据库,而无需关心底层SQL语句。SQLite是一个轻量级的关系型数据库...
Maven坐标:org.springframework:spring-orm:4.2.2.RELEASE; 标签:springframework、spring、orm、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...
Maven坐标:org.springframework:spring-orm:5.0.8.RELEASE; 标签:springframework、spring、orm、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...
.NET ORM实现代码主要涉及到的对象关系映射(Object-Relational Mapping,简称ORM)技术,这是一种在软件开发中用于简化数据库操作的技术。ORM框架允许开发者使用面向对象的方式与数据库进行交互,而无需直接编写SQL...
5. **查询语法**:Grove.ORM可能提供了类似于Linq-to-Entities的查询方式,允许你用C#代码编写查询,然后自动转换为SQL执行。理解如何使用Lambda表达式进行复杂查询和过滤。 6. **事务处理**:了解如何在Grove.ORM...
Maven坐标:org.springframework:spring-orm:4.2.2.RELEASE; 标签:springframework、spring、orm、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...
总结,这款基于C#的代码生成器,通过结合SQLServer数据库和自定义ORM框架,实现了高效、灵活的代码生成,极大地提升了开发效率。开发者在实际使用中,可以根据自身项目的特性和需求,对源码进行调整和扩展,以满足...
在C#中,ORM框架可以帮助开发者无需编写大量的SQL语句,就能实现对数据库的操作,极大地提高了开发效率。这款ORM工具显然是针对SQL数据库设计的,其轻量级特性意味着它可能更注重易用性和性能,而不是提供复杂的企业...
2.1 ORM框架的实现:VB/C#.Net实体代码生成工具(EntitysCodeGenerate) 4 2.2 在开发中的实际应用 5 2.2.1 单个实体对象的数据库操作 6 1、获取一个实体对象信息 6 2、插入一个实体对象信息 6 3、更新一个实体对象...
在.NET框架下,AdoNet是微软提供的一套用于访问数据库的标准API,而ORM则是在此基础上进行抽象,帮助开发者避免直接编写SQL语句,提高开发效率和代码可维护性。 自定义ORM框架的设计通常包括以下几个关键部分: 1....
Dapper是一款轻量级、高性能的SQL查询库,而DapperExtensions则在Dapper的基础上提供了一种更方便的ORM(对象关系映射)方式,使得开发者无需手动编写SQL语句,就能实现对数据库的操作。 Dapper本身是一个简单的SQL...
最最最最最最基础的操作数据库增删改查,支持事务,通用类,理论上支持MsSql,Oracle,OleDb,MySql,...(由于后两种需要额外引入相关Dll,因此本类中不包含实现,自己添加即可。) 本类只是提供一种思路,可以参考。
总结来说,ORM框架是为了解决关系型数据库与面向对象编程之间的不匹配问题,反射和特性是C#中实现ORM的关键工具。反射提供运行时的类型信息和动态操作,特性则作为对象与数据库映射的标记。通过学习和应用这两者,...