在没有级联删除的情况下解析对数据模型的依赖性

时间:2009-02-11 11:44:27

标签: c# data-modeling dependencies

数据模型:

tTemplate(TemplateId int PK)
tPage(PageId int PK,TemplateId int FK)
tEmailMessage(EmailMessageId int PK,TemplateId int FK)

要求:

只有在没有依赖项时才允许删除模板。

TemplateService负责删除模板:

new TemplateService()。删除(myTemplate);

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

我已经对EventBrokers和Message Queues做了一些研究,但却没有看到他们如何帮助我。我也没有看到单独使用.net事件模型如何解决这个问题。

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

1 个答案:

答案 0 :(得分:1)

这就是您的后备存储应该实现参照完整性的原因。在可能的情况下,您的模型将实现相同的功能,但删除仅在没有引用的情况下才有效。

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

如果您拥有所有数据,.Net模型仅保证参照完整性,否则只会尝试删除,而不是保证。