這是一個輕量的映射工具,不可與ORM做比較。它不參與到DB。一般用來配合SqlHelper來使用。目前實現的功能有:DataReader到List的映射、
DataReader到T的映射、List到List的映射、T到T的映射、T到資料庫參數的映射。以上這些都是平時操作資料庫工作量最大的部分,而且都是重
複的沒有含量的工作。其實真正寫SQL並不佔用多少工作量。
下面來說下如何使用,並寫幾個各個功能下的使用樣本。
首先下載:Assionsoft.AssionMapper 程式集,所有映射功能全部在這個程式集下面。不需要進行XML的配置。
1、我們不採取XML配置的映射形式,而是在實體類上標上特性的方式。通過中繼資料標識映射。比如下面的學生實體:
[ResultMap("SysNo")]//參與單體DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ResultsMap("SysNo")]//參與集合DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ObjectMap]//參與對象映射
[ParameterMap]//參與資料庫參數映射
public int SysNo { get; set; }
[ResultMap("Name")]//參與單體DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ResultsMap("Name")]//參與集合DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ObjectMap]//參與對象映射
[ParameterMap("Name")]//參與資料庫參數映射
public string Name { get; set; }
[ResultMap("Gender")]//參與單體DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ResultsMap("Gender")]//參與集合DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ObjectMap]//參與對象映射
[ParameterMap]//參與資料庫參數映射
public bool Gender { get; set; }
[ResultMap("Age")]//參與單體DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ResultsMap("Age")]//參與集合DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ObjectMap]//參與對象映射
[ParameterMap]//參與資料庫參數映射
public int Age { get; set; }
[ResultMap("Birthday")]//參與單體DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ResultsMap("Birthday")]//參與集合DataReader返回映射,如果[ResultMap]無參則預設已屬性名稱匹配
[ObjectMap]//參與對象映射
[ParameterMap]//參與資料庫參數映射
public DateTime Birthday { get; set; }
2、資料庫插入增、刪、改的參數映射,我們通過委託把Common.Parameter.AddWithValue傳給方法進行與student的映射。
Student student = new Student() { Name = "張三", Gender = true, Age = 25, Birthday = DateTime.Now };
SqlConnection conn = new SqlConnection("server=ASSIONYANG-PCJ\\SQLEXPRESS;uid=sa;pwd=123;database=Testing");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO ([Name],[Gender],[Age],[Birthday]) VALUES (@Name,@Gender,@Age,@Birthday)";
ParameterMap.SqlParameterMap<Student>(cmd.Parameters.AddWithValue, student);//產生資料庫參數
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
3、DataReader返回集合的映射
IList<Student> studentList = new List<Student>();
SqlConnection conn = new SqlConnection("server=ASSIONYANG-PCJ\\SQLEXPRESS;uid=sa;pwd=123;database=Testing");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT [SysNo],[Name],[Gender],[Age],[Birthday] FROM Student ORDER BY [SysNo] DESC";
SqlDataReader dataReader = cmd.ExecuteReader();
studentList = ResultMap.GetIList<Student>(dataReader);//從DataReader返回實體集合
dataReader.Close();
conn.Close();
4、DataReader 返回實體的映射
Student student = new Student();
SqlConnection conn = new SqlConnection("server=ASSIONYANG-PCJ\\SQLEXPRESS;uid=sa;pwd=123;database=Testing");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT [SysNo],[Name],[Gender],[Age],[Birthday] FROM Student WHERE [SysNo]=@SysNo";
ParameterMap.SqlParameterMap<Student>(cmd.Parameters.AddWithValue, student);
SqlDataReader dataReader = cmd.ExecuteReader();
student = ResultMap.Load<Student>(dataReader);//從DataReader返回單個實體
dataReader.Close();
conn.Close();
5、集合TO 集合的映射
IList<Student> studentList = new List<Student>();
IList<Student> studentResultList = new List<Student>();
studentResultList = ResultMap.GetIList<Student, Student>(studentList);//從集合返回集合
6、實體TO 實體的映射
Student student = new Student();
Student studentResult = new Student();
studentResult = ResultMap.Load<Student, Student>(student);//從實體返回實體
水文結束!