2017-02-02 1 views
0

J'utilise VS 2015 et j'ai créé un projet ASP.NET MVC et ajouté quelques choses (se connecter et enregistrer a bien fonctionné avec Localdb appelé MyDatabase.mdf) qui a fonctionné.ASP.NET MVC CRUD avec LocalDb savechanges erreur

CRUD créer seulement la fonction en db le reste viendra plus tard.

Mais maintenant je ne peux pas obtenir ce travail. A l'intérieur du localdb appelé MyDatabase.mdf, j'ai créé une autre table appelée Amsterdam:

[MyDatabase.mdf] [1]

Et voici ma MainDbContext.cs - ici j'ai ajouté

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

Et dans mon Home dossier que j'ai écrit Amsterdam.cshtml comme ceci:

@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> 

Et dans mon Models dossier que je créé Amsterdam.cs qui ressemble à ceci:

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

Et dans mon dossier Controllers mon HomeController ressemble à ceci:

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

Je sais que je suis proche parce que mon registre ne fonctionne pas mais je ne peux pas obtenir mon CRUD pour Amsterdam pour fonctionner. Lorsque je clique sur ok comme indiqué sur la capture d'écran (quand je clique sur le point de l'annonce):

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

Je reçois une erreur

DbUpdateException était non gérée par le code utilisateur

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

+2

Il dit également "Voir l'exception intérieure". As tu ? Ça dit quoi ? – Shyju

+0

{"Nom d'objet invalide 'dbo.Amsterdams'."} – DjRossoreTV

+0

'db.Amsterdam.Create()'? Qu'est-ce que ça fait? – Shyju

Répondre

0

Il semble que EF effectue la pluralisation de votre nom d'objet pour définir le nom de la table. n la base de données (à partir de l'erreur - Invalid object name dbo.Amsterdams).

Si votre nom de la table est Amsterdam (singulier, sans le « s » de fuite), puis ajoutez cette annotation de données à votre classe de modèle:

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

Et si vous souhaitez désactiver cette pluralisation des noms de table complètement, vous pouvez ajouter cette ligne à votre MainDbContext classe:

protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
{ 
    dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
}