我正在尝试从数据库中删除标签。还有另一个名为Pages的项目集合。每个页面都有多个标签。在删除之前,如何确保标签不属于任何页面?有什么建议吗?
到目前为止,这是我的进展。这是默认的删除操作,增加了两个变量:
// 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);
}
答案 0 :(得分:1)
将第一行更改为:
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...
}
答案 1 :(得分:1)
您可以确保标签没有任何页面。
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);
答案 2 :(得分:0)
为什么不在数据库级别启用参照完整性?如果您使用的是MSSQL,这很容易。我想知道是否有一个特定的原因可以在应用程序级别处理它,因为它可以很容易地在数据库级别处理?