Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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# 在DataContext中查找依赖于其他实体的实体(通过DB ForeignKeys)_C#_Sql Server_Entity Framework_Linq To Sql - Fatal编程技术网

C# 在DataContext中查找依赖于其他实体的实体(通过DB ForeignKeys)

C# 在DataContext中查找依赖于其他实体的实体(通过DB ForeignKeys),c#,sql-server,entity-framework,linq-to-sql,C#,Sql Server,Entity Framework,Linq To Sql,我正在编写一些非常通用的数据库代码,我想找到一种方法来查询实体集中与另一个实体相关的一组类型(使用LINQ to SQL EntityFramework,数据库优先) 例如,我可能有一个属于某个类别的产品 SELECT * FROM Products p INNER JOIN Categories c ON p.CategoryId = c.Id 在我的数据库中,p.CategoryId是一个外键,它被限制为非NULL。(即:产品必须属于某一类别) 现在,如果我尝试从类别中删除,就会出现错误,

我正在编写一些非常通用的数据库代码,我想找到一种方法来查询实体集中与另一个实体相关的一组类型(使用LINQ to SQL EntityFramework,数据库优先)

例如,我可能有一个属于某个类别的产品

SELECT * FROM Products p INNER JOIN Categories c ON p.CategoryId = c.Id
在我的数据库中,p.CategoryId是一个外键,它被限制为非NULL。(即:产品必须属于某一类别)

现在,如果我尝试从类别中删除,就会出现错误,因为仍然存在与类别相关的产品,并且我没有(或希望)对关系应用级联删除

我想做的是检查我的DataContext库,并动态确定类别是由产品设置的,因此如果我想从类别中删除,我首先需要从产品中删除

所谓“动态”,我的意思是,我的代码不会预先知道类型或关系(它不知道具体的产品或类别实体),但我愿意使用反射来评估DLL以解决这些关系

我已经查看了与DataContext相关的代码,可以看到某些实体上的EntityRef属性(这是问题解决的一半),但我似乎找不到任何方法来判断这些关系在底层数据库中是强制的还是可选的(即非空或可空)


您知道,通过将删除规则设置为“级联”,可以在实体框架中自动级联删除吗?这可能会使事情变得更简单(但不一定为LINQtoSQL提供通用解决方案)

请查看此处以了解更多信息:

我想您是指修改EF模型的属性?这是我知道如何做到这一点的唯一方法,但这种方法在这里并不合适,因为我不想修改模型。实际上,我想在正常使用中阻止此操作,但想办法绕过它,或者至少对其进行评估,以便以正确的顺序删除实体。明白了。是的,我的意思是使用模型属性。