обновление таблицы в entity framework 4 / mvc 3!

#entity-framework #asp.net-mvc-3 #entity-framework-4

#entity-framework #asp.net-mvc-3 #entity-framework-4

Вопрос:

не могли бы вы помочь с этим? Держу пари, это совсем не сложно … но я новичок в EF и у меня крайний срок на выходные. Я хочу обновить таблицу значениями.. но первичным ключом является столбец identity. Итак, моя задача такова .. если она существует, обновите .. если она не добавляется в
таблицу.. это мой код .. и я застрял в этой другой части ..!

Структура таблицы выглядит следующим образом

Таблица первичных ключей — System: SystemID, systemName

Таблица внешних ключей — SystemConfiguration: SystemConfigurationId, SystemID, SystemRAM, SystemHard-Диск

         public void SaveSystemConfigurations(SystemConfiguration systemConfig)
         {
              var config = (from s in Context.SystemConfiguration 
                       where s.SystemId == systemConfig.SystemId
                            select s).FirstOrDefault();

             if (config == null)
             {
                 Context.SystemConfigurations.AddObject(systemConfig);
                 Context.SaveChanges();
             }
             else
             {
                // EntityKey systemConfigKey= new EntityKey("systemConfig", "systemConfigId", config.SystemConfigurationId);
                 Context.SystemConfigurations.Attach(systemConfig);
                Context.SaveChanges();

           }
       }
  

Ответ №1:

Попробуйте это:

         public void SaveSystemConfigurations(SystemConfiguration systemConfig)
         {
              var config = (from s in Context.SystemConfiguration 
                       where s.SystemId == systemConfig.SystemId
                            select s).FirstOrDefault();

             if (config == null)
             {
                 Context.SystemConfigurations.AddObject(systemConfig);
             }
             else
             {
                config.Attribute = value; // Do your update here

           }
           Context.SaveChanges();
       }
  

Редактировать. Это должна быть конфигурация, а не systemConfig.

Комментарии:

1. intellisense не выдает никаких. Как это сделать?!

2. ДА. .Атрибут — это просто пример. Заменить . Добавьте атрибут, который вы хотите обновить. Например. config. Измененная дата = DateTime. Сейчас; и т.д.

3. Спасибо.. ysrb .. это работает как шарм ..! продолжаю изучать, есть ли лучшее решение .. вместо ручной настройки такого количества столбцов..

4. @hillary что ты пытаешься сделать? Вам не нужно задавать много столбцов, потому что в конфигурации будут свойства, заполненные из базы данных.

5. ysrb .. это то, что я имел в виду .. вручную устанавливая каждый столбец. else { config. SystemIsBlueToothEnabled= systemConfig. SystemIsBlueToothEnabled; конфигурация. SystemCPU= systemConfig. SystemCPU; конфигурация. SystemMaxRam= systemConfig. SystemMaxRam; } Разве это не то, что вы имели в виду?

Ответ №2:

Метод ApplyCurrentValues применит скалярные атрибуты к объекту, который соответствует тому же ключу. Я предполагаю, что вы изменяете реальную сущность (объект, у которого есть действительный ключ сущности).

Это сработало бы:

 var eSet  = config.EntityKey.EntitySetName;
Context.ApplyCurrentValues(eSet, systemConfig);
Context.SaveChanges();
  

Комментарии:

1. это то, что ты имеешь в виду? Ключ EntityKey= новый EntityKey(«Context.SystemConfigurations»,»SystemConfigurationId», config. SystemConfigurationId); var eSet = ключ. EntitySetName; Контекст. Примените текущие значения (eSet, systemConfig); но нет, это не работает..

2. не будет работать, пока я не установлю systemConfig. SystemConfigurationId = ключ. значение.. но почему мы должны делать это вручную?! я что-то упускаю!

3. Если вы дадите мне немного больше информации о том, откуда взялся systemConfig, я обновлю свой пост и предоставлю вам более «современное» решение.

Ответ №3:

 public void SaveSystemConfigurations(SystemConfiguration systemConfig)
     {    
    var context = new EntitiesModel(); 
    //here is the name of the partial class created on the Context area of the edmx designer.cs
    var config = (from s in context.SystemConfiguration 
                   where s.SystemId == systemConfig.SystemId
                        select s).FirstOrDefault();
    context.ApplyCurrentValues(config.EntityKey.EntitySetName, systemConfig);
    // systemConfig comes from the view with values set by the user
    // you dont have to manually need to map one value at the time
    context.SaveChanges();
    }