2012-03-21 8 views
0

こんにちは私はConsoleと呼ばれるテーブルを持っていて、その中にConsoleNameという1つの属性が含まれています。これはこのテーブルのIDと、Gameと `Gamerという2つのテーブルの外部キーです。私が抱えている問題は、すべてのアプリケーションが正常に動作し、すべてを正常に挿入することができますが、コンソールを削除することになると、次のエラーが表示されるのでコンソールテーブルからレコードを削除できなくなります。プライマリキーテーブルを削除する

Value cannot be null. 
Parameter name: entity 

私は次のことを試してみましたMVC3 C#

を使用しています:

[HttpPost, ActionName("Delete")] 
    public ActionResult DeleteConfirmed(string id?) 
    {    
     ConsoleTBL consoletbl = db.ConsoleTBLs.Find(id?); 
     db.ConsoleTBLs.Remove(consoletbl); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

しかし、それは動作しません。

してください、あなたは私はあなたが感謝

を求めるものを掲示しなければならない私に教えて何かを必要とする場合

EDIT:コンソールコントローラ:コンソールテーブルの

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MvcApplication1.Models; 

namespace MvcApplication1.Controllers 
{ 
    public class ConsoleController : Controller 
    { 
     private GameZoneEntities3 db = new GameZoneEntities3(); 

     // 
     // GET: /Console/ 

     public ViewResult Index() 
     { 
      return View(db.ConsoleTBLs.ToList()); 
     } 

     // 
     // GET: /Console/Details/5 

     public ViewResult Details(string id) 
     { 
      ConsoleTBL consoletbl = db.ConsoleTBLs.Find(id); 
      return View(consoletbl); 
     } 

     // 
     // GET: /Console/Create 

     public ActionResult Create() 
     { 
      return View(); 
     } 

     // 
     // POST: /Console/Create 

     [HttpPost] 
     public ActionResult Create(ConsoleTBL consoletbl) 
     { 
      if (ModelState.IsValid) 
      { 
       db.ConsoleTBLs.Add(consoletbl); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(consoletbl); 
     } 

     // 
     // GET: /Console/Edit/5 

     public ActionResult Edit(string id) 
     { 
      ConsoleTBL consoletbl = db.ConsoleTBLs.Find(id); 
      return View(consoletbl); 
     } 

     // 
     // POST: /Console/Edit/5 

     [HttpPost] 
     public ActionResult Edit(ConsoleTBL consoletbl) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(consoletbl).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return View(consoletbl); 
     } 

     // 
     // GET: /Console/Delete/5 

     public ActionResult Delete(string id) 
     { 
      ConsoleTBL consoletbl = db.ConsoleTBLs.Find(id); 
      return View(consoletbl); 
     } 

     // 
     // POST: /Console/Delete/5 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(string id) 
     {    
      ConsoleTBL consoletbl = db.ConsoleTBLs.Find(id); 
      db.ConsoleTBLs.Remove(consoletbl); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 

インデックスページ:

@model IEnumerable<MvcApplication1.Models.ConsoleTBL> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table> 
    <tr> 
     <th> 
      ConsoleID 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ConsoleID) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) | 
      @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) | 
      @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ }) 
     </td> 
    </tr> 
} 

</table> 

私はactionlinksの主キーを "ConsoleID"に設定しましたが、これはちょうど私が何をしたのかを知らせるためには役に立たなかった

答えて

0

Consoleを削除すると、GameGamerテーブルのレコードが孤立します(外部キーが適用されている場合は許可されません)。したがって、Consoleを削除するには、それを外部キーとして使用して他のレコードを削除するか、カスケード動作を設定してそれを行う必要があります。

編集:あなたが投稿したエラーは、あなたにパラメータが不足していると思われるようです。削除の場合、1つのビューでの削除と呼ばれる2つの操作が考えられます。 1つの削除アクションは通常のページリクエスト(通常は削除を確認する)であり、もう1つはポストバックを必要とするもの(あなたの質問に投稿したもの)です。

プロセスはおそらく削除ボタンに(フォームで送信ボタンとなります)

Get /consoles/delete/1

押して確認]または[OK]をクリックし、この

Get /consoles/details/1

ようになります

Post /consoles/delete/1

+0

私はそれを試みたので、私はすべての依存関係を削除して、 )が削除されません。 – user1137472

0

これをデバッグモードで実行し、deleteメソッドにステップしましたか?

consoletblが存在することを確認しましたか?

[HttpPost, ActionName("Delete")] 
public ActionResult DeleteConfirmed(string id) 
{    
    ConsoleTBL consoletbl = db.ConsoleTBLs.Find(id); 

    if(consoletbl != null) 
    { 
     db.ConsoleTBLs.Remove(consoletbl); 
     db.SaveChanges(); 
    } 
    else 
    { 
     // should probably return an error message 
     throw new ArgumentNullException("Could not find a console with the id of " + id); 
    } 
    return RedirectToAction("Index"); 
} 

渡しているIDが見つからない場合は、例外がスローされます。

@model IEnumerable<MvcApplication1.Models.ConsoleTBL> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table> 
    <tr> 
     <th> 
      ConsoleID 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ConsoleID) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.ConsoleID}) | 
      @Html.ActionLink("Details", "Details", new { id=item.ConsoleID}) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.ConsoleID}) 
     </td> 
    </tr> 
} 

</table> 

ConsoleIDがプライマリIDであると仮定して、このプロパティで「PrimaryKey」を置き換えます。 /* * /あなたのコードにコメントを入れるために使用され、それらの間のものはコンパイルされません

+0

はいコンソールテーブルが存在し、はい、デバッグで実行しましたが、実行してコンソールのインデックスページにアクセスしてコンソールを削除しようとするとすぐには役に立たなかったのですが、私が言及したエラーが発生しました – user1137472

+0

あなたのコードとあなたに結果を知らせてください – user1137472

+0

私はあなたのコードを追加したと私は知っているときに何も起こらない、ページがそれをリフレッシュし、レコードがまだそこにあるが、エラーを生成しない – user1137472

関連する問題