1

Je reçois cette erreur sur cette ligne de code -Définir la clé pour cette EntityType

ReportRunnerEntities reportDB = new ReportRunnerEntities(); 

    public ActionResult Index() 
    { 
     **var types = reportDB.ReportTypes.ToList();** 
     return View(types); 
    } 

Les tables de la databse ont des clés définies et identités définies.

Mes modèles sont -

namespace ReportRunner.Models 
{ 
    public partial class ReportRunnerEntities : DbContext 
    { 
     public DbSet<Reports> Report { get; set; } 
     public DbSet<ReportTypes> ReportTypes { get; set; } 
     public DbSet<Users> Users { get; set; } 
    } 
} 

namespace ReportRunner.Models 
{ 
    public partial class ReportTypes 
    { 
     public int ReportTypeId { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public List<Reports> Reports { get; set; } 
    } 
} 

namespace ReportRunner.Models 
{ 
    public class Reports 
    { 
     public int ReportId { get; set; } 
     public int ReportTypeId { get; set; } 
     public int UserId { get; set; } 
     public string Title { get; set; } 
     public ReportTypes ReportType { get; set; } 
    } 

}

namespace ReportRunner.Models 
{ 
    public partial class Users 
    { 
     public int UserId { get; set; } //ArtistId 
     public string Name { get; set; } 
    } 
} 

et voici ma chaîne de connexion -

Je pense qu'il n'a jamais atteint la base de données. Comme je l'ai dit, les clés sont définies dans la base de données.

Ai-je raté quelque chose?

+0

S'il vous plaît signaler l'erreur que vous obtenez. – Nix

+0

Et où dites-vous EF que ReportTypeId, ReportId et UserId sont des clés primaires? –

Répondre

2

Il y a deux choses que je vois cela devrait changer:

  • ReportTypes doivent être

    ReportType
  • rapports publics sur la Liste {get; ensemble; } devrait être public ICollection Reports {get; ensemble; }

  • Si vous définissez un dans votre web.config, chaîne de connexion vous devez dire EF ce que l'on est avec le constructeur dans votre ReportRunnerEntities classe comme ceci:


    namespace ReportRunner.Models 
    { 
        public partial class ReportRunnerEntities : DbContext 
        { 
         public ReportRunnerEntities : base("name=NameOfConnectionInWebConfig") 
         {} 
         public DbSet<Reports> Report { get; set; } 
         public DbSet<ReportTypes> ReportTypes { get; set; } 
         public DbSet<Users> Users { get; set; } 
        } 
    } 
    

Vous pouvez en savoir plus sur ce ici: http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

Juste sur le côté, si vous envisagez d'utiliser .NET MVC et EF Code First comme pile, je commencerais à utiliser le modèle Repository et Unit of Work. Voici un bon post sur la façon de mettre en place: Entity Framework 4 CTP 4/CTP 5 Generic Repository Pattern and Unit Testable

+0

Merci Paul, c'était très utile. – duckmike

Questions connexes