目前,我一直在使用位于服务外观下的 Entity Framework 1.0。
以下是我创建的用于更新或插入相关设备的保存方法之一。
这目前有效,但是,我不禁觉得它有点黑客必须将引用的属性设置为 null 然后重新附加它们只是为了让插入工作。changedDevice 已经保存了这些值,为什么我需要再次分配它们。
所以,我想我会将模型更新为 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();
}
}