在C#中分隔columnName和Value

时间:2010-06-13 02:29:10

标签: c#

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

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数组(例如,eeloyeeID):Value(例如1),EmployeeName:tommy,DepartmentID:10)

string[] values=buildValues(emp);


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


  return values;
}

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

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

3 个答案:

答案 0 :(得分:0)

您需要使用反射。

具体来说,您需要遍历typeof(Employee).GetProperties()

答案 1 :(得分:0)

这是一个已解决的问题。做一些关于ORM的研究并看看这个SO问题:.Net ORM that works well with MySQL

答案 2 :(得分:0)

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

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

static class Mappings
{
    private static Dictionary<Type, Dictionary<string, string>> TypeMappings;

    private static Dictionary<string, string> EmployeeMapping;
    //... other mapped classes

    static Mappings()
    {
        TypeMappings = new Dictionary<Type, Dictionary<string, string>>();

        EmployeeMapping = new Dictionary<string, string>();
        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>(T item)
    {
        if (!TypeMappings.ContainsKey(typeof(T)))
            throw new Exception("wrong call");

        Dictionary<string, string> mapping = TypeMappings[typeof(T)];
        List<string> results = new List<string>();
        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方法,获取这些名称,反映值,并构建结果字符串。