我在这里想要实现的是,我想要使用带有type的CRUD类从文件插入数据到数据库中。我将演示一个简单的例子。
public class SubjectTester<T>where T : class
{
public void Create()
{
var db_context = new DbContext();
//here I get file content and do stuff with it
//here I want create an instance of T and add the data from the file
//here I will use the Add method from my DbContext and save the changes
}
}
public class DbContext
{
//has some stuff
}
public class TestSubjectA
{
//some properties
public int Id { get; set; }
public string Name { get; set; }
}
public class TestSubjectB
{
//some properties
public double Sum { get; set; }
}
public class TestSubjectC
{
//some properties
public int Id { get; set; }
public string Name { get; set; }
public bool IsRigged { get; set; }
}
正如您所看到的,问题是一些表有更多的列其他数据类型也不同。我在做这个因为我想动态地添加数据,这取决于我得到的。我也不想用一堆if else来检查是什么T的类型……我希望我的解释清楚了。
首先我要给出几个有用的链接:
微软反射
反射类的所有方法和属性
修改后的示例:
public class SubjectTester<T>where T : class
{
public void Create()
{
var db_context = new DbContext();
var instance = Activator.CreateInstance<T>();
foreach(var property in typeof(T).GetProperties())
{
if (property.PropertyType.Name == typeof(String).Name)
{
property.SetValue(instance, "Text");
Console.WriteLine(property.GetValue(instance));
}
}
//save chages to context here
}
}
public class DbContext
{
//has some stuff
}
public class TestSubjectA
{
//some properties
public int Id { get; set; }
public string Name { get; set; }
}
public class TestSubjectB
{
//some properties
public string Name { get; set; }
}
public class TestSubjectC
{
//some properties
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
代码中的更改如下:
- 创建该类的实例
- 获取类的所有属性并通过foreach循环运行它们
- 你需要做一些类型检查,无论你想做什么,这里显示的是一个例子,不适用于其他具有不同属性类型和属性数量的类
- 完成类型检查后,将值赋给属性
这就是我目前所能收集到的。我希望我解释得够清楚了。
对不起,如果它是不够描述性的,如果我没有很好地解释!