【问题标题】:How to update db by reflection in c#如何在c#中通过反射更新数据库
【发布时间】:2018-12-26 16:56:40
【问题描述】:

我想通过反射更新一个表实例

这是我尝试过的

var type = Assembly.GetExecutingAssembly().GetTypes()
    .FirstOrDefault(t => t.Name == TableName);


object instance = Activator.CreateInstance(type);

foreach (var item in dic)
{

    PropertyInfo information = type.GetProperties()
        .SingleOrDefault(x => x.Name == item.Key);

    information.SetValue(instance, item.Value.ToString(), null);

}
var fx = db.Set(instance.GetType());
fx.Add(instance);
result= db.SaveChanges();

它给了我以下异常

   InnerException = {"Violation of PRIMARY KEY constraint
 'PK_primryKeyName. Cannot insert duplicate key in object 'tableName'.
 The duplicate key value is (39).
\r\nThe statement has been terminated."}

它似乎实体框架将其视为插入而不是更新

【问题讨论】:

  • 类型是如何定义的?它是否定义了比较器/等于?
  • var type = Assembly.GetExecutingAssembly().GetTypes() .FirstOrDefault(t => t.Name == TableName);
  • 不是变量,对象的实际类型

标签: c# .net reflection system.reflection


【解决方案1】:

这就是我们在不返回并通过手动选择获取的情况下处理未附加的事物的方式。

   var type = Assembly.GetExecutingAssembly().GetTypes()
   .FirstOrDefault(t => t.Name == "");


            object instance = Activator.CreateInstance(type);

            foreach (var item in new Dictionary<string, string>())
            {

                PropertyInfo information = type.GetProperties()
    .SingleOrDefault(x => x.Name == item.Key);

                information.SetValue(instance, item.Value.ToString(), null);

            }               

            db.Entry(instance).State = EntityState.Modified;
            db.SaveChanges();

【讨论】:

  • 能否请您在当前情况下详细说明
猜你喜欢
  • 2013-02-24
  • 2021-07-05
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多