我有一个简单的模型来跟踪储物柜租赁,作为学习EF Code First和DDD原则的一种方式。该模型具有以下要求:
模型设置如下:
组织拥有两个集合;一个用于存放一系列储物柜,另一个用于存放一系列租赁期。储物柜和租赁期间并未提及其母公司与DDD传统保持一致,但它们都包含其母公司所需的外键。储物柜和租赁期均包含一系列租金。租赁物具有储物柜所需的外键和租赁期间所需的外键。下面的图片将很好地了解我的模型的样子。
由于该组织使用级联删除建模,因此当组织被删除时,它会删除所有关联的储物柜和租赁期。但我相信,对于使用级联删除建模的储物柜和租赁期也是有意义的,这样如果一个储物柜被删除,那么所有相关的租赁也会被删除。同样的事情适用于租赁期。当我配置它时,EF告诉我我不能这样做,因为它可以创建循环或多个级联路径。但是,如果我采取任何一个关系(无关紧要哪一个)并关闭级联删除,那么它将创建数据库就好了。我想这可以修复多个级联路径问题。
因为删除级联在这个模型中不起作用,这似乎表明我的问题可能被建模错误。我已经考虑了很长一段时间了,我无法想出任何方法来模拟这个可以用于级联删除的问题。
我已经在下面包含了测试项目(Visual Studio 2010解决方案)。唯一需要更改的是App.config中的连接字符串。我对所有建议持开放态度,因为我刚刚开始学习EF Code First和DDD原则。
答案 0 :(得分:2)
它实际上没有以错误的方式建模,但只是SQL Server(不是EF)不允许多个级联路径。如果您的Organization
被删除,则会触发Lockers
和RentalPeriods
的级联删除,并触发级联删除Rentals
=问题。如果只有其中一个触发级联删除到Rentals
,你应该没问题。您必须确保不会单独删除Lockers
或RentalPeriods
。如果是,您必须正确地手动删除Rentals
,或者必须使用数据库触发器(避免此问题的常用方法)。