Как обновить БД путем отражения в C # - PullRequest
0 голосов
/ 26 декабря 2018

я хочу обновить экземпляр таблицы с помощью отражения

вот что я пробовал

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."}

это кажется Entity Frameworkсчитает это вставкой, а не обновлением

1 Ответ

0 голосов
/ 26 декабря 2018

Это то, как мы обрабатываем вещи, которые не прикреплены, не возвращаясь и не выбирая их вручную.

   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();
...