2014-01-11 6 views
0

Я пытаюсь удалить теги из базы данных. Существует еще одна коллекция предметов под названием Страницы. На каждой странице есть несколько тегов. Как я могу гарантировать, что тег не принадлежит к какой-либо странице перед удалением? Какие-либо предложения?WebApi - Проверка ссылочной целостности перед событием удаления

Вот мой прогресс. Это по умолчанию удалить действие с добавлением двух переменных:

// 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); 
    } 

ответ

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); 
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... 
} 
0

Почему бы не включить ссылочную целостность на уровне БД? если вы используете MSSQL, это легко. Я задаюсь вопросом, есть ли конкретная причина для этого, чтобы его обрабатывали на уровне приложения, когда его можно легко обрабатывать на уровне БД?

Смежные вопросы