任何人都可以提供一种更简单、更自动化的方法吗?
对于 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; }
}