2017-05-08 15 views
1

別のテーブルの参照であるオブジェクトを削除しようとしています。私は削除しようとしている他のテーブルのfkであるオブジェクトを削除するEntity Framework

オブジェクト:

[Table("NotasAdjuntas")] 
public class NotasAdjuntas 
{ 
    public int Id { get; set; } 

    [Required] 
    [MinLength(3)] 
    [MaxLength(20)] 
    public string Asunto { get; set; } 
    [Required] 
    public string Detalle { get; set; } 
    [DataType(DataType.Date)] 
    public DateTime Fecha { get; set; } 
    [DataType(DataType.Time)] 
    public DateTime Hora { get; set; } 
    public virtual Local local { get; set; } 
    public virtual string username { get; set; } 

} 

を関連付けられている

[Table("Local")] 
public class Local 
{ 
    [Key] 
    public int Id { get; set; } 
    public string ViejoId { get; set; } 
    [Required] 
    [Index("UniqueNuevoId", 1, IsUnique = true)] 
    [Display(Name ="Nuevo Id")] 
    public int NuevoId { get; set; } 
    [Display(Name ="Id Unificado")] 
    public string UnificadoCon { get; set; } 
    [Required(ErrorMessage = "Es necesario agregar el nombre del comercio")] 
    [Display(Name = "Comercio")] 
    public string NombreComercio { get; set; } 
    [Display(Name = "Nom Unificado")] 
    public string NombreComercioUnificado { get; set; } 
    [Required] 
    public string Direccion { get; set; } 
    [Required] 
    [Display(Name ="Tel")] 
    public string Telefono { get; set; } 
    [Required] 
    public string Provincia { get; set; } 
    [Required] 
    public string Localidad { get; set; } 
    public Proveedor Proveedor { get; set; } 
    public Estado Estado { get; set; } 

    public DateTime FechaIngreso = DateTime.Today; 
    public bool Bonificado { get; set; } 
    public bool Premium { get; set; } 

    [Display(Name ="Instalación")] 
    [DataType(DataType.Date)] 
    public DateTime FechaInstalacion { get; set; } 
    public virtual List<NotasAdjuntas> notas { get; set; } 

オブジェクト私は、「ローカル」を削除したいが、私はこれをしたい場合はことを理解し、まず、 "NotasAdjuntas"を取り除かなければなりません。

これは、すべてのヘルプは高く評価され、私のコントローラ(LocalsController)

// GET: Locals/Delete/5 
    public ActionResult Delete(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     Local local = db.Locales.Find(id); 
     if (local == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(local); 
    } 

    // POST: Locals/Delete/5 
    [HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public ActionResult DeleteConfirmed(int id) 
    { 
     Local local = db.Locales.Find(id); 
     db.Locales.Remove(local); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

です!

+0

_Local_エントリを削除しようとすると例外はありますか? –

答えて

1

あなただけ(EFが適切な関係を生成します - 1対多この場合は)それが何をすべき、必要な属性を持つ「ローカル」マークする必要があります。つまり、関係を適切に設定しただけでは、「子」エンティティの自動削除が行われます。

[Table("NotasAdjuntas")] 
public class NotasAdjuntas 
{ 
    public int Id { get; set; } 
    .... 
    [Required] //<<<<< add this 
    public virtual Local local { get; set; } 
    .... 
} 
+0

魅力のように働いた、ありがとう! – EmiL

0

ローカルを削除する前にメモのエントリを削除します。このような何か:

public ActionResult DeleteConfirmed(int id) 
{ 
    foreach (var nota in local.notas) 
    { 
     var notaParaEliminar = db.NotasAdjuntas.find(nota.Id); 
     db.NotasAdjuntas.Remove(notaParaEliminar); 
    } 
    Local local = db.Locales.Find(id); 
    db.Locales.Remove(local); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 
関連する問題