C# WebApi-删除事件前的引用完整性检查

C# WebApi-删除事件前的引用完整性检查,c#,asp.net-mvc,entity-framework,asp.net-web-api,C#,Asp.net Mvc,Entity Framework,Asp.net Web Api,我正在尝试从数据库中删除标记。还有另一个项目集合,称为页面。每个页面都有多个标记。如何确保标记在删除之前不属于任何页面?有什么建议吗 这是我到目前为止的进展。这是默认的删除操作,添加了两个变量: // DELETE api/Tag/5 public HttpResponseMessage DeleteTag(int id) { // Added variables var nullTags = db.Tags.Where(c => c

我正在尝试从数据库中删除标记。还有另一个项目集合,称为页面。每个页面都有多个标记。如何确保标记在删除之前不属于任何页面?有什么建议吗

这是我到目前为止的进展。这是默认的删除操作,添加了两个变量:

    // DELETE api/Tag/5
    public HttpResponseMessage DeleteTag(int id)
    {
        // Added variables
        var nullTags = db.Tags.Where(c => c.Pages.Count == 0);
        var matched = db.Tags.Where(c => c.TagId == id);

        Tag tag = db.Tags.Find(id);
        if (tag == null)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        db.Tags.Remove(tag);

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        return Request.CreateResponse(HttpStatusCode.OK, tag);
    }

将第一行更改为:

Tag tag = db.Tags.Where(c => (c.id == id) && (c.Pages.Count == 0)).FirstOrDefault();

if (tag != null) {
    //It does not have pages, so you can delete it...
}

您可以确保标记没有任何页面

var tag = db.Tags.SingleOrDefault(t => t.id == id);

if (tag == null) 
{
    return Request.CreateResponse(HttpStatusCode.NotFound);
}

if (tag.Pages.Any()) 
{
    return Request.CreateResponse(
        HttpStatusCode.BadRequest, 
        "A tag must not be assigned to any page before you delete it"
    );
}

db.Tags.Remove(tag);
db.SaveChanges();

return Request.CreateResponse(HttpStatusCode.OK, tag);

为什么不在DB级别启用引用完整性?如果您使用的是MSSQL,这很容易。我想知道,当它可以很容易地在DB级别处理时,在应用程序级别处理它是否有特定的原因