2017-02-02 3 views
0

Ich benutze VS 2015 und ich erstellt ein ASP.NET MVC-Projekt und fügte ein paar Dinge hinzu (Anmeldung und Registrierung funktionierte gut mit Localdb MyDatabase.mdf), die funktioniert haben.ASP.NET MVC CRUD mit LocalDb savechanges Fehler

CRUD nur erstellen Funktion in db der Rest wird später kommen.

Aber jetzt kann ich diese Arbeit nicht bekommen. Im Inneren des LocalDB MyDatabase.mdf genannt, ich habe eine andere Tabelle Amsterdam genannt erstellt:

[MyDatabase.mdf] [1]

Und das ist mein MainDbContext.cs - hier habe ich

public DbSet<Amsterdam> Amsterdam { get; set; } 

Und in meinem Home Ordner schrieb ich Amsterdam.cshtml wie folgt aus:

@model IEnumerable<MyFirstWebsite.Models.Amsterdam> 
@{ 
    ViewBag.Title = "Amsterdam"; 
    var username = User.Identity.Name; 
} 

<h2>@username's Bestellijst Amsterdam</h2> 

@using (Html.BeginForm()) 
{ 
    <span>Enter new item: </span> 
    <br/> 
    <input type="text" name="new_item"/> 
    <br/> 
    <span>Public post?</span> 
    <input type="checkbox" name="check_public"/><br/> 
    <br/> 
    <input type="submit" value="Add Item"/> 
} 
<br/> 

<table class="table table-bordered table-condensed"> 
    <thead> 
    <tr> 
     <th style="text-align: center;">Id Bestelling</th> 
     <th style="text-align: center;">Details Bestelling</th> 
     <th style="text-align: center;">Time - Ontvangen Bestelling</th> 
     <th style="text-align: center;">Time - Verzonden Bestelling</th> 
     <th style="text-align: center;">Edit</th> 
     <th style="text-align: center;">Delete</th> 
     <th style="text-align: center;">Public Post</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td style="text-align: center;"></td> 
     <td style="text-align: center;"></td> 
     <td style="text-align: center;"></td> 
     <td style="text-align: center;"></td> 
     <td style="text-align: center;"> 
      <a href="@Url.Action("Edit", "Home")/">Edit</a> 
     </td> 
     <td style="text-align: center;"> 
      <a href="@Url.Action("Delete", "Home")/">Edit</a> 
     </td> 
     <td style="text-align: center;"></td> 
    </tr> 
    </tbody> 
</table> 

Und in meinem Models Ordner erstellt ich Amsterdam.cs, die wie folgt aussieht:

namespace MyFirstWebsite.Models 
{ 
    public class Amsterdam 
    { 
     [Key] 
     public int Id { get; set; } 

     public string Details { get; set; } 

     public string Date_Posted { get; set; } 
     public string Time_Posted { get; set; } 
     public string Date_Edited { get; set; } 
     public string Time_Edited { get; set; } 
     public string Public { get; set; } 
     public int User_Id { get; set; } 
    } 
} 

Und in meinem Controllers Ordner meine HomeController wie folgt aussieht:

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

[HttpPost] 
public ActionResult Amsterdam(Amsterdam list) 
{ 
    string timeToday = DateTime.Now.ToString("h:mm:ss tt"); 
    string dateToday = DateTime.Now.ToString("M/dd/yyyy"); 

    if (ModelState.IsValid) 
    { 
     using (var db = new MainDbContext()) 
     { 
      Claim sessionEmail = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email); 
      string userEmail = sessionEmail.Value; 
      var userIdQuery = db.Users.Where(u => u.Email == userEmail).Select(u => u.Id); 
      var userId = userIdQuery.ToList(); 

      var dbAmsterdam = db.Amsterdam.Create(); 
      dbAmsterdam.Details = list.Details; 
      dbAmsterdam.Date_Posted = dateToday; 
      dbAmsterdam.Time_Posted = timeToday; 
      dbAmsterdam.User_Id = userId[0]; 
      db.Amsterdam.Add(dbAmsterdam); 
      db.SaveChanges(); 
     } 
    } 
    else 
    { 
     ModelState.AddModelError("", "Incorrect format has been placed"); 
    } 

    return View(); 
} 

Ich weiß, ich habe nahe, weil mein Register funktioniert, aber ich kann nicht bekomme meine CRUD für Amsterdam zum arbeiten. Wenn ich ok klicken, wie im Screenshot gezeigt (wenn ich auf Ad Artikel klicken):

https://i.stack.imgur.com/XsGws.png

ich einen Fehler

DbUpdateException durch Benutzercode nicht behandelte war

https://i.stack.imgur.com/I6kYP.png

+2

Es sagt auch "Siehe die innere Ausnahme". Hast du ? Was sagt es ? – Shyju

+0

{"Ungültiger Objektname 'dbo.Amsterdams'."} – DjRossoreTV

+0

'db.Amsterdam.Create()'? Was macht das? – Shyju

Antwort

0

Es scheint, dass EF Pluralization Ihres Objektnamens macht, um den Tabellennamen i zu definieren n der Datenbank (aus dem Fehler - Invalid object name dbo.Amsterdams).

Wenn Ihre Tabellennamen Amsterdam (Singular, ohne die Hinter „s“) ist, dann diese Daten Anmerkung zu Ihrem Modell-Klasse hinzufügen:

[Table("Amsterdam")] 
public class Amsterdam 
{   
    [Key] 
    public int Id { get; set; } 
    ..... 
} 

Und wenn Sie möchten, deaktivieren, dass Pluralisierung von Tabellennamen vollständig, können Sie diese Linie zu Ihrer MainDbContext Klasse hinzufügen: