我正在编写一些非常通用的数据库代码,我想找到一种方法来查询我的实体集中的一组类型(使用LINQ to SQL EntityFramework,数据库优先),这些类型与另一个实体相关。
所以,例如,我可能有一个产品属于一个类别;
SELECT * FROM Products p INNER JOIN Categories c ON p.CategoryId = c.Id
在我的数据库中,p.CategoryId是外键约束为NON-NULL。 (即产品必须属于一个类别)。
现在,如果我尝试删除类别,我会收到错误,因为有些产品仍与类别相关,而且我没有(或想要)应用于该关系的CASCADE DELETE。
我想要做的是检查我的DataContext库,并动态确定Products按类别键入,所以如果我想从Categories中删除,我首先需要从Products中删除。
通过'动态',我的意思是我的代码不具备类型或关系的前瞻性知识(它不具体了解产品或类别实体)但我愿意使用Reflection来评估DLL来解决这些关系。
我查看了与DataContext相关的代码,并且可以看到某些实体上的EntityRef属性(这是解决问题的一半),但我似乎找不到任何方法来判断这些关系是强制性的还是可选的( ie;底层数据库中的NON-NULL或NULLABLE。
答案 0 :(得分:0)
您知道可以通过将删除规则设置为“级联”来自动级联实体框架中的删除吗?这可能会使事情变得更容易(虽然不一定为LINQ to SQL提供通用解决方案)。
点击此处了解更多信息: http://msdn.microsoft.com/en-us/library/bb738695.aspx