誰でもこれを行うためのより簡単で自動的な方法を提供できますか?
FilterComboTemplate モデルには次の保存メソッドがあります。データは、webapi によって json から ac# モデル エンティティに変換されています。
そのため、DeviceProperty テーブルに重複するエントリを作成しないため、各フィルターを順番に調べて、コンテキストから割り当てられた DeviceFilterProperty を取得し、フィルター内のオブジェクトをオーバーライドする必要があります。以下のコードを参照してください。
既に存在する場合はすべてのオブジェクト Id を持っているので、これは自動的に処理されるべきだと思われますが、おそらくそれは単なる希望的観測です。
public void Save(FilterComboTemplate comboTemplate)
{
// Set the Device Properties so we don't create dupes
foreach (var filter in comboTemplate.Filters)
{
filter.DeviceProperty = context.DeviceFilterProperties.Find(filter.DeviceFilterProperty.DeviceFilterPropertyId);
}
context.FilterComboTemplates.Add(comboTemplate);
context.SaveChanges();
}
ここから、フィルターが存在するかどうかを確認し、データベース内のものと異なる場合は手動で更新して、FilterComboTemplate の編集後にまったく新しいセットを作成し続けないようにする必要があります。
私はこのタイプのコードをたくさん書いていることに気づきました。ちょっとした文脈のために、以下に他のモデルクラスを含めました。
public class FilterComboTemplate
{
public FilterComboTemplate()
{
Filters = new Collection<Filter>();
}
[Key]
public int FilterComboTemplateId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public ICollection<Filter> Filters { get; set; }
}
public class Filter
{
[Key]
public int FilterId { get; set; }
[Required]
public DeviceFilterProperty DeviceFilterProperty { get; set; }
[Required]
public bool Exclude { get; set; }
[Required]
public string Data1 { get; set; }
}
public class DeviceFilterProperty
{
[Key]
public int DeviceFilterPropertyId { get; set; }
[Required]
public string Name { get; set; }
}