【发布时间】:2017-05-20 00:15:24
【问题描述】:
我的任务是针对现有数据库编写例程。这个数据库有几个表结构相同,但名称不同(我没有设计这个,请不要建议更改数据库设计)。我在 EF 中写这个,模型是首先创建数据库的。
对于这种情况,我能想到的最佳选择是创建一个具有完全相同属性的类,并创建一个可以接受泛型类型的例程,以将数据从 EF 模型复制到泛型模型。
我的模型:
// Sample EF database-first created model
namespace SampleDataModel.Models
{
using System;
using System.Collections.Generic;
public partial class SampleClassFlavorOne
{
public int Id {get; set;}
public string PropertyOne {get; set;}
public string Property2 {get; set;}
public DateTime Property3 {get; set;}
}
}
// Sample of generic class I created
public class GenericSampleClass{
public int Id {get; set;}
public string PropertyOne {get; set;}
public string Property2 {get; set;}
public DateTime Property3 {get; set;}
}
我的日常:
private static void CopyFlavorToGenericList<T1, T2>(List<T1> fromList, List<T2> toList){
foreach (var t in fromList)
{
//(As you can see, I have tried entering the foreach loop a both ways
//foreach (var p in typeof(T1).GetProperties())
foreach (var p in typeof(T2).GetProperties())
{
if (p != null && p.CanWrite)
{
dynamic newObject = null;
p.SetValue((T2)newObject, p.GetValue(t, null), null);
}
}
toList.Add(toObject);
}
}
实施例程:
switch (flavor){
case "FlavorOne":
List<SampleClassFlavorOne> _baseFlavor = db.SampleClassFlavorOne.ToList();
List<GenericSampleClass> _genericFlavor = new List<GenericSampleClass>();
CopyFlavorToGenericList<SampleClassFlavorOne, GenericSampleClass>(_baseFlavor, _genericFlavor);
break;
}
无论我尝试什么,我总能得到:
“System.Reflection.TargetException”类型的异常发生在 mscorlib.dll 中,但未在用户代码中处理。附加信息:对象与目标类型不匹配。
我无法弄清楚我错过了什么。
- 我可能缺少什么?
- 我是不是走错了路?如果是这样,在这些条件下,做我想做的事情的正确方法是什么?
任何帮助表示赞赏,谢谢!
【问题讨论】:
标签: c# entity-framework reflection setvalue