現在、サービス ファサードの下にある Entity Framework 1.0 を使用しています。
以下は、問題のデバイスを更新または挿入するために作成した保存方法の 1 つです。
これは現在機能していますが、参照されたプロパティをnullに設定し、挿入を機能させるためだけにそれらを再アタッチする必要があるのはちょっとしたハックだと感じずにはいられません。changedDevice はすでにこれらの値を保持しているため、再度割り当てる必要があるのはなぜですか。
そこで、モデルを EF4 に更新しようと思いました。そうすれば、外部キーに直接アクセスできます。ただし、これを行うと、ダイアグラムからエンティティを削除して再度追加する以外に、外部キーを追加する簡単な方法がないように思われることがわかりました。DB列名からそれらの名前を変更するすべてのエンティティプロパティをすでに経験しているため、これを行いたくありません。誰でも助けることができますか?
/// <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();
}
}