0

我在 ASP.NET 中遇到了 C# MVC 项目的问题。我遇到的问题是类别系统:如果一个类别已添加到公司,那么您应该无法添加任何作为父类别(层次结构中的更高级别)而不是已经添加的类别(因为它已经包含在搜索中)。

现在我已经在 C# 代码中添加了这个:

if (companyToUpdate.Category.Any(x => x.Parent.Any(z => z.ID == currentCategoryID))) {
    //already exists
}

现在的问题是我想将此检查添加为 SQL Server 数据库中的存储过程。

我的结构如下所示:

公司(所有公司)

 ID Title
1   StackOverflow

类别(所有类别)

 ID Title
1   Website
2   Helpful site
3   Very helpful site

CategoryDe​​tails(用于了解每个类别的父/子,每个类别与其所有父项都有关系)(网站 -> 有用的站点 -> 非常有用的站点)

Parent_ID   Child_ID
1           2
1           3
2           3

CompanyCategoryDe​​tails(该公司添加了哪些类别?)

 Company_ID Category_ID
1           3

现在解决问题:当您尝试在 CompanyCategoryDe​​tails 中添加新行 (1, 2) 时,它应该被拒绝,因为您已经向其中添加了 Category_ID 3,这意味着 Category_ID 2 已经包含在 CategoryDe​​tails 中指定桌子。

我开始检查我在哪里 INNERJOIN 表,但在我意识到它不能按照我的想法完成之前并没有走多远。

4

1 回答 1

1

我认为您要求的支票是这样的:

IF EXISTS(
SELECT * 
FROM    CompanyCategoryDetails CCD
JOIN    CategoryDetails CD
        ON  CCD.Category_ID = CD.Child_ID
WHERE   CCD.Company_ID = @Company_ID
AND     (CD.Parent_ID = @Category_ID OR CD.Child_ID = @Category_ID))
BEGIN
    --already exists
END

这将检查尝试添加到公司 (a) 父类别或 (b) 现有类别

于 2012-10-17T08:24:02.883 回答