Обновление Entity Framework 1.0 до 4.0 для включения внешних ключей - PullRequest
0 голосов
/ 27 апреля 2010

В настоящее время я работаю с Entity Framework 1.0, который расположен под фасадом службы.

Ниже приведен один из методов сохранения, которые я создал для обновления или вставки соответствующего устройства.

В настоящее время это работает, но я не могу не чувствовать, что это немного хакерство, когда нужно установить для свойств, на которые ссылаются, значение null, а затем заново присоединить их, чтобы заставить вставку работать. ChangeDevice уже содержит эти значения, поэтому зачем мне их назначать снова.

Итак, я думал, что обновлю модель до EF4. Таким образом, я могу получить прямой доступ к внешним ключам. Однако, сделав это, я обнаружил, что не существует простого способа добавить внешние ключи, кроме как удалить сущность из диаграммы и повторно добавить ее. Я не хочу этого делать, поскольку я уже прошел через все свойства сущностей, переименовывая их из имен столбцов БД. Кто-нибудь может помочь?

 /// <summary>
    /// Saves the non network device.
    /// </summary>
    /// <param name="nonNetworkDeviceDto">The non network device dto.</param>
    public void SaveNonNetworkDevice(NonNetworkDeviceDto nonNetworkDeviceDto)
    {
        using (var context = new AssetNetworkEntities2())
        {
            var changedDevice = TransformationHelper.ConvertNonNetworkDeviceDtoToEntity(nonNetworkDeviceDto);
            if (!nonNetworkDeviceDto.DeviceId.Equals(-1))
            {
                var originalDevice =
                context.NonNetworkDevices.Include("Status").Include("NonNetworkType").FirstOrDefault(
                  d => d.DeviceId.Equals(nonNetworkDeviceDto.DeviceId));
                context.ApplyAllReferencedPropertyChanges(originalDevice, changedDevice);
                context.ApplyCurrentValues(originalDevice.EntityKey.EntitySetName, changedDevice);
            }
            else
            {
                var maxNetworkDevice = context.NonNetworkDevices.OrderBy("it.DeviceId DESC").First();
                changedDevice.DeviceId = maxNetworkDevice.DeviceId + 1;
                var status = changedDevice.Status;
                var nonNetworkType = changedDevice.NonNetworkType;
                changedDevice.Status = null;
                changedDevice.NonNetworkType = null;
                context.AttachTo("DeviceStatuses", status);
                if (nonNetworkType != null)
                {
                    context.AttachTo("NonNetworkTypes", nonNetworkType);
                }

                changedDevice.Status = status;
                changedDevice.NonNetworkType = nonNetworkType;
                context.AddToNonNetworkDevices(changedDevice);
            }

            context.SaveChanges();
        }
    }

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Затем вам нужно будет отредактировать файл EDMX в редакторе XML. Возможно, обновите одну таблицу автоматически, измените файл EDMX, чтобы увидеть, что изменилось, а затем войдите и отредактируйте все остальные.

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

Другая проблема, с которой вы столкнетесь, заключается в том, что EF4 захочет использовать множественные имена ваших сущностей, если вы не попросите об этом. Если вы обновите модель с EF1 до EF4 и дадите ей множественное число имен, не забудьте проверить любые слабонаблюдаемые вызовы Include () и, исправляя их, замените их на один из многих строго типизированных. найти в Интернете.

0 голосов
/ 22 мая 2010

У меня была та же проблема, вот так я и исправил свою модель.

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

Вы также можете получить доступ к сведениям об отношениях, дважды щелкнув по линии на диаграмме.

Обратите внимание, что созданное свойство необходимо сопоставить с полем FK в БД.

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