我在删除一个在SO上似乎相当频繁的实体时遇到问题,但到目前为止,没有一个答案可以解决我的问题。
操作失败:无法更改关系,因为 一个或多个外键属性是不可为空的。当一个 改变了关系,相关的外键属性是 设置为空值。如果外键不支持空值, 必须定义新的关系,外键属性必须是 分配了另一个非空值,或者不相关的对象必须是 删除。
我有Device
个实体,设备可以在Folder
。在Folder
中我可以删除设备没问题。但是我有Rules
可以应用于影响基于IP路由的文件夹。当规则应用于文件夹时我无法删除Device
,如果相同的Rule
应用于另一个文件夹,我可以删除它没问题。这非常令人困惑!
请注意,规则可以适用于Folder
(即将适用于所有设备)或单个Device
public class Device
{
public virtual ICollection<Folder> PresentInFolders { get; set; }
public virtual RoutingRule RoutingRule { get; set; }
}
public class Folder : IValidate
{
public virtual ICollection<Device> Devices { get; set; }
}
public class RoutingRule
{
public virtual Folder Folder { get; set; }
public virtual Device Device { get; set; }
}
删除代码
public void DeleteDevice(Device device)
{
try
{
if (null != device.RoutingRule)
{
var repo = this.uow.GetRepository<RoutingRule>();
repo.Delete(device.RoutingRule);
device.RoutingRule = null;
}
foreach (var folder in device.PresentInFolders.ToList())
{
folder.Devices.Remove(device);
}
device.PresentInFolders.Clear();
this.serviceCollection.Delete(device);
this.uow.Save();
}
catch (Exception ex)
{
throw new Exception("Failure deleting device", ex);
}
}
任何人都可以了解删除Device
无效的原因吗?