Сохраняющиеся изменения, сделанные в WPF с Entity Framework - PullRequest
0 голосов
/ 29 августа 2011

У меня проблема с тем, что Entity Framework не сохраняет изменения в БД.Я использую статический метод для загрузки некоторых значений, и контекст Entity отбрасывается (в операторе using).

Затем объекты загружаются в сетку данных WPF, где они могут управляться конечным пользователем.

Когда пользователь заканчивает вносить изменения, нажимается кнопка «обновить», и список объектов отправляется обратно на уровень данных для сохранения в БД.Я вижу, что объекты, которые были изменены в пользовательском интерфейсе, отражают их новое значение (т. Е. Не проблема привязки данных).

Я бы предположил, поскольку контекст сущности, который загрузил объекты, был удален, я должен затем присоединить этиобъекты должны быть сохранены во вновь созданном контексте.Правильный?Когда я делаю это, состояние объекта измененного объекта (я вижу, что это состояние установлено) изменяется на «Неизменен».В БД ничего не сохраняется.

Какого черта я пропускаю?!

Вот код для загрузки и обновления значений:

public static List<SSIS_Configuration> GetConfigurationValuesForTenant(string tenantKey, SqlConnectionString connectionString)
    {
        List<SSIS_Configuration> configStrings = new List<SSIS_Configuration>();
        if (connectionString.IsValid())
        {
            try
            {

                using (SSISFrameworkEntities entities = new SSISFrameworkEntities(connectionString.ToEDMXString("SSISFramework.SSISFramework")))
                {
                    string configFilterStartingValue = "CommonConfig_" + tenantKey;

                    configStrings = (from configString in entities.SSIS_Configurations
                                    where configString.ConfigurationFilter.StartsWith(configFilterStartingValue)
                                    select configString).ToList();
                }
            }
            catch { }
        }

        return configStrings;
    }

    public static void UpdateConfigurations(List<SSIS_Configuration> configurations, SqlConnectionString connectionString)
    {
        if (connectionString.IsValid())
        {
            try
            {
                using (SSISFrameworkEntities entities = new SSISFrameworkEntities(connectionString.ToEDMXString("SSISFramework.SSISFramework")))
                {
                    foreach (SSIS_Configuration config in configurations)
                    {
                        entities.Attach(config);
                    }

                    entities.SaveChanges();
                }
            }
            catch { }
        }
    }

1 Ответ

1 голос
/ 30 августа 2011

Приложение WPF является сценарием для прикрепленных сущностей, поэтому вам не следует распоряжаться контекстом, если вы собираетесь изменять сущности, загруженные из контекста.Если вы располагаете им, вы должны реализовать много дополнительной логики, потому что вы должны сообщать новый контекст о каждом отдельном изменении , которое пользователь вносил в сущности и отношения.

Так что в вашем сценарии вызывается Attachбудет только соединять сущности с контекстом, но вам нужно будет также установить их состояние (присоединение помещенных сущностей в состояние Unchanged).Помните, что вы должны правильно установить состояние на Modified, Deleted или Inserted в зависимости от операции, которую вы хотите выполнить.Если у ваших измененных сущностей есть какие-то отношения, которые также были изменены, вы должны установить состояние и для связанных сущностей, а в случае измененных отношений между сущностями вы должны изменить и само состояние отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...