#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();
}