C#基础系列:实现自己的ORM(MiniORM的测试代码)
看到有同学反馈,说MiniORM代码有Bug,也不知道怎么用,所以今天我就写了些测试代码。希望能够给点帮助。
同时也发现了两Bug,一并罗列出:
1、MiniORM.PubFuncs.GetObjectType()函数:
同时也发现了两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;
- //[email protected]=''[email protected]=''
- 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";
- }
- }
- }
- //这里需要做strWHERE不为空的判断
- 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的测试结果如:
好了,各位,你可以使用这个调试代码来试试了。。。
相关文章: