繁体   English   中英

在C#中分隔columnName和Value

[英]Separating columnName and Value in 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(egemployeeID):Value(eg1),EmployeeName:tommy,DepartmentID:10)的数组

string[] values=buildValues(emp);


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


  return values;
}

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

如果您能帮助我,我将不胜感激

您需要使用反射。

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

这是一个已解决的问题。 对ORM进行一些研究,看看这个SO问题: .Net ORM与MySQL很好地兼容

首先(如前所述),最好将这种映射留给ORM工具,而不必理会它们。 但是,ORM工具在保护您免受数据访问等细节的侵扰方面往往过于“母性”,因此扩展它们或更改其行为可能会很复杂。

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

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方法采用这些名称,反映值并构建结果字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM