在C#中分隔columnName和Value

我有一个员工对象,如下所示

class emp { public int EmpID { get; set; } public string EmpName { get; set; } public int deptID { get; set; } } 

我需要在此类或不同的类中创建映射,以使用我的SQL的列名映射属性

 for eg. EmpdID="employeeID" EmpName="EmployeeName" deptID="DepartmentID" 

当我从我的asp.net页面创建员工类并将其传递给函数时:

 for eg: emp e=new emp(); e.EmpID=1; e.EmpName="tommy"; e.deptID=10; 

当填充emp对象并传递给buildValues函数时,它应该返回ComumnName(egemployeeID)的数组:Value(eg1),EmployeeName:tommy,DepartmentID:10)

 string[] values=buildValues(emp); public string[] buildValues(emp e) { string[] values=null; return values; } 

我有两个问题:1。我在哪里指定映射2.如何在上面显示的buildValues函数中使用映射并构建值字符串数组。

如果你能帮助我,我真的很感激

你需要使用Reflection。

具体来说,您需要循环使用typeof(Employee).GetProperties()

这是一个已解决的问题。 做一些关于ORM的研究并看看这个问题: .Net ORM适用于MySQL

首先,(正如已经说过的)最好将这种映射留给ORM工具,而忘记它们。 但是,ORM工具在保护您免受数据访问等血腥细节方面往往过于“母性”,因此扩展它们或改变其行为可能会很复杂。

也就是说,您可以创建一个特殊的类(Mappings)来保存所有映射代码。 映射本身最好保存在字典中,如下所示:

 static class Mappings { private static Dictionary> TypeMappings; private static Dictionary EmployeeMapping; //... other mapped classes static Mappings() { TypeMappings = new Dictionary>(); EmployeeMapping = new Dictionary(); EmployeeMapping.Add("EmpID", "EmployeeID"); EmployeeMapping.Add("EmpName", "EmployeeName"); EmployeeMapping.Add("DeptID", "DepartmentID"); TypeMappings.Add(typeof(Employee),EmployeeMapping); //... other mapped classes } public static string[] BuildValues(T item) { if (!TypeMappings.ContainsKey(typeof(T))) throw new Exception("wrong call"); Dictionary mapping = TypeMappings[typeof(T)]; List results = new List(); foreach (var keyValuePair in mapping) { string propName = keyValuePair.Key; string dbName = keyValuePair.Value; PropertyInfo pi = typeof(T).GetProperty(propName); object propValue = pi.GetValue(item, null); results.Add(string.Format("{0}:{1}", dbName, propValue)); } return results.ToArray(); } } 

这里,TypeMappings是所有映射类的字典,其映射依次在propertyName – databaseName字典中。

BuildValues方法获取这些名称,反映值并构建结果字符串。