Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析对数据模型的依赖关系,而无需级联删除_C#_Data Modeling_Dependencies - Fatal编程技术网

C# 解析对数据模型的依赖关系,而无需级联删除

C# 解析对数据模型的依赖关系,而无需级联删除,c#,data-modeling,dependencies,C#,Data Modeling,Dependencies,数据模型: t模板(模板ID int PK) tPage(PageId int PK,TemplateId int FK) tEmailMessage(EmailMessageId int PK,TemplateId int FK) 要求: 仅当模板没有依赖关系时才允许删除模板 TemplateService负责删除模板: 新建TemplateService().Delete(myTemplate) 页面和电子邮件模块依赖于模板模块,而模板模块又不知道这些依赖关系。在某些设置中,页面或电子邮件模

数据模型:

t模板(模板ID int PK)
tPage(PageId int PK,TemplateId int FK)
tEmailMessage(EmailMessageId int PK,TemplateId int FK)

要求:

仅当模板没有依赖关系时才允许删除模板

TemplateService负责删除模板:

新建TemplateService().Delete(myTemplate)

页面和电子邮件模块依赖于模板模块,而模板模块又不知道这些依赖关系。在某些设置中,页面或电子邮件模块不会出现事件。如何解决对底层数据模型的依赖关系?如何让TemplateService开始查询以确定是否可以删除该项

我已经对EventBroker和消息队列做了一些研究,但没有看到它们单独可以如何帮助我。我也不知道单独使用.net事件模型如何解决这个问题


我不是真的在寻找一种维护数据完整性的方法,而是一种允许服务间通信而不会导致不必要的服务依赖性的方法。我可能有一个PageService的实现,其中删除模板是可以的,并且通过将tPage.TemplateId设置为null可以解决依赖性问题。在其他实现中,我可能希望创建级联删除。

这就是支持存储应该实现引用完整性的原因。在可能的情况下,您的模型将实现相同的东西,但只有在没有任何引用的情况下,删除才会起作用

此外,我建议不要在尝试删除之前检查所有数据,因为最终可能会出现可能导致问题的竞争条件。从效率的角度来看,您可以简单地从一开始就实现级联删除,假设顶级对象总是有子行


.Net模型仅在您拥有所有数据的情况下保证引用完整性,否则只会尝试删除,而不会保证删除。

我不是在寻找一种维护数据完整性的方法,而是一种允许服务间通信而不会导致不必要的服务依赖性的方法。我已经编辑了我原来的帖子。