2017-10-18 4 views
0

Je me demande pourquoi je reçois une erreur lors de l'utilisation du code d'abord, mais pas lorsque la base de données d'abord. Pour vous donner un rapide coup d'oeil à ma demande c'est ma classe:Erreur lors de l'utilisation du code d'abord

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

    [ForeignKey("User")] 
    public int UserId { get; set; } 
    public virtual User User { get; set; } 

    [ForeignKey("Answer")] 
    public int AnswerId { get; set; } 
    public virtual Answer Answer { get; set; } 
} 

Et après cette ligne de code:

Vote v = new Vote(); 
v.UserId = 1; 
v.AnswerId = 1; 

using (var context = new DatabaseContext()) { 
    context.Votes.Add(v); 
    context.SaveChanges(); 
} 

Je reçois l'erreur:

An unhandled exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll 

Additional information: An error occurred while updating the entries. See the inner exception for details. 

Ainsi l'erreur se produit lorsque j'utilise code first avec la base de données SQLExpress. Lorsque j'utilise database first avec la base de données SQLite, cela fonctionne comme un charme. Les mêmes classes, mais pas d'erreur.

J'ai remarqué que pour éviter l'erreur, je dois initialiser v.User et v.Answer. Mais pourquoi? Dans database first, il était inutile.

+0

Pourriez-vous essayer de les définir sur null et essayer? –

+0

@KeyurPATEL Oui et cela ne fonctionne toujours pas. Il ne fonctionne que lorsque je crée de nouvelles instances de 'User' et' Answer' et les assigne aux propriétés de l'objet 'v'. – Dawvawd

+0

Pouvez-vous s'il vous plaît ajouter votre constructeur de modèle s'il vous plaît –

Répondre

0

On dirait que vous n'avez pas codé la classe de contexte db. Vous devez créer une classe dbcontext par exemple.

using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using Votes.Models; 
namespace vote.Context 
{ 
    public class DatabaseContext : DbContext 
    { 
     public DatabaseContext() : base("VotesDatabase") 
     { } 
     public DbSet<Vote> Votes{ get; set; } 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 
    } 
} 

Voici un exemple pour comprendre une application MVC de base. Creating MVC Applications Using Entity Framework Code First Approach