我希望能够编写和更新我的数据库,将对象发送到我的服务,然后让服务动态决定将哪种对象写入或更新到数据库。
这就是我在静态执行时所做的(更新示例)
switch ((string)property.GetValue(oLinq, null))
{
case "news":
t_news oNews = (t_news)oLinq;
List<t_news> newsList = (from n in oDB.t_news where n.ID.Equals(oNews.ID) select n).ToList();
t_news oNe = newsList[0];
i = 0;
foreach (System.Reflection.PropertyInfo p in oNews.GetType().GetProperties().ToList())
{
if (p.GetValue(oNews, null) != null)
{
typeof(t_news).GetProperties().ToList()[i].SetValue(oNe, p.GetValue(oNews, null), null);
}
i++;
}
oNe.dLastUpdate = DateTime.Now;
oDB.SubmitChanges();
oLinq = (object)oNews;
break;
return oLinq;
oDB 是我的数据上下文。oLinq 只是一个包含我要更新的数据的对象。它包含一个字段,我在其中指定需要更新哪种表。我使用 switch case 来确定指定该表。我现在有 4 种不同的情况,我的做法几乎相同。
但我希望能够动态地执行此操作,因此我不必重写所有这些代码 4 次,并且能够在将来添加新表。
这就是我正在尝试的:
List<string> alsTableNames = (from tables in oDB.Mapping.GetTables() select tables.TableName).ToList();
foreach (string sTableName in alsTableNames)
{
if (String.Compare(sTableName.Substring(6), (string)property.GetValue(oLinq, null)) == 0)
{
string sBasicType = sTableName.Replace("dbo.", "");
string sType = "RegisterService." + sBasicType;
Type tType = Type.GetType(sType);
oLinq = Convert.ChangeType(oLinq, tType);
这可以将 oLinq 对象转换为我想要的类型。但是行不通的是将数据从数据库中取出以用新数据替换它。我基本上需要一种以动态方式执行此操作的方法:
List<t_news> newsList = (from n in oDB.t_news where n.ID.Equals(oNews.ID) select n).ToList();
t_news oNe = newsList[0];
就像是:
List<//type of the table I want> list = (from t in //table where t.//firstproperty.Equals(oLinq.getType().getProperties().toList()[0]) select t.ToList();
object oNewObj = list[0];
有任何想法吗?