我有一个员工对象,如下所示
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函数中使用映射并构建值字符串数组。
如果你能帮助我,我真的很感激
答案 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方法,获取这些名称,反映值,并构建结果字符串。