我正在编写一些非常通用的数据库代码,并且我想找到一种方法来查询与另一个实体相关的实体集中的一组类型(使用 LINQ to SQL EntityFramework,数据库优先)。
因此,例如,我可能有一个属于某个类别的产品;
SELECT * FROM Products p INNER JOIN Categories c ON p.CategoryId = c.Id
在我的数据库中,p.CategoryId 是一个外键约束为非空。(即;产品必须属于一个类别)。
现在,如果我尝试从类别中删除,我会收到错误,因为仍有产品与类别相关,并且我没有(或不想要)应用于关系的 CASCADE DELETE。
我要做的是检查我的 DataContext 库,并动态确定类别是由 Products 键入的,因此如果我想从类别中删除,我首先需要从产品中删除。
通过“动态”,我的意思是我的代码不会预先知道类型或关系(它不知道具体的产品或类别实体),但我愿意使用反射来评估 DLL 以解决这些关系。
我查看了与 DataContext 相关的代码,并且可以看到某些实体上的 EntityRef 属性(这是解决了一半的问题),但我似乎找不到任何方法来判断这些关系是强制性的还是可选的(即;NON -NULL 或 NULLABLE)在基础数据库中。
?