В настоящее время я работаю с 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();
}
}