web-dev-qa-db-fra.com

Impossible de créer un contrôleur avec Entity Framework - Impossible de récupérer les métadonnées

_ {J'utilise VS2013

Lorsque j'essaie de créer un "Contrôleur MVC 5 avec des vues utilisant entity Framework" j'obtiens l'erreur suivante:

there was an error running the selected code generator ''Unable to retrieve metadata for WebApplication.Domain.Entities.Product'.'

EFDbContext.cs

using System.Data.Entity;
using WebApplication.Domain.Entities;

namespace WebApplication.Domain.Concrete
{
    public class EFDbContext : DbContext
    {
        public DbSet<Product> Products;
    }
}

Product.cs

using System.ComponentModel.DataAnnotations;

namespace WebApplication.Domain.Entities
{
    public class Product
    {
        [Key]
        public int ProductID { get; set; }

        [Required]
        public string Title { get; set; }
    }
}

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.Microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WebApplication;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

J'ai mis en place une table appelée Products et sa définition est la suivante:

CREATE TABLE [dbo].[Products] (
    [ProductID] INT            IDENTITY (1, 1) NOT NULL,
    [Title]     NVARCHAR (255) NULL,
    PRIMARY KEY CLUSTERED ([ProductID] ASC)
);

Des idées ce qui ne va pas? J'ai essayé tout ce qui est revenu sur Google.

Paquets que j'ai installés:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.0.1" targetFramework="net45" />
  <package id="jQuery" version="1.10.2" targetFramework="net45" />
  <package id="jQuery.Validation" version="1.11.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc" version="5.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="3.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages" version="3.0.0" targetFramework="net45" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.0.0" targetFramework="net45" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
  <package id="Unity" version="3.0.1304.1" targetFramework="net45" />
  <package id="Unity.Mvc" version="3.0.1304.0" targetFramework="net45" />
  <package id="WebActivatorEx" version="2.0.4" targetFramework="net45" />
</packages>

Mon projet peut être trouvé ici: https://github.com/jimmyt1988/WebApplication2

16
Jimmyt1988
public class EFDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}

J'ai oublié le {get; ensemble; } ... tout fonctionne maintenant #crying

8
Jimmyt1988

Le problème peut être dû à l'attribut [NotMapped] manquant dans l'une des classes de modèle.

Comme je manquais l'attribut et que je me rusais la tête.

[Display(Name="Logo")]
[DataType(DataType.Upload)]
[NotMapped]
public HttpPostedFileBase Logo { set; get; }
4
blin2linkme

Réessayez après avoir supprimé la ligne ci-dessous de votre classe EFDbContext.

public System.Data.Entity.DbSet<WebApplication.Domain.Entities.Product> Products { get; set; }

Exemple:

1
Kunal

S'il vous plaît vérifier tous les modèles sont enregistrés dans le contexte

Exemple:

Vous avez un modèle comme celui-ci

public class MedicineStrength
{
    [Key]
    public int Id { get; set; }
    public int? MedicineId { get; set; }
    [ForeignKey("MedicineId")]
    public Medicine Medicine { get; set; }

    public double Strength { get; set; }

    public int? MetricPrefixId { get; set; }
    [ForeignKey("MetricPrefixId")]
    public virtual MetricPrefix MetricPrefix { get; set; }

    public int? UnitId { get; set; }
    [ForeignKey("UnitId")]
    public virtual Unit Unit { get; set; }

    public int? MedicineTypeId { get; set; }
    [ForeignKey("MedicineTypeId")]
    public virtual MedicineType MedicineType { get; set; }
}

Vérifier toutes les virtual Les instances de modèle sont enregistrées dans un contexte comme celui-ci

public class HMContext : DbContext
    {
        public HMContext()
        : base("name=HMContext")
        {
            Database.SetInitializer<HMContext>(null);
        }

        /// ... ///

        public virtual DbSet<Medicine> Medicines { get; set; }
        public virtual DbSet<MedicineGeneric> MedicineGenerics { get; set; }
        public virtual DbSet<MedicineStrength> MedicineStrengths { get; set; }
        public virtual DbSet<MedicineType> MedicineTypes { get; set; }
        public virtual DbSet<MedicineDosage> MedicineDosages { get; set; }
        public virtual DbSet<MedicineCategory> MedicineCategories { get; set; }
        public virtual DbSet<MetricPrefix> MetricPrefixes { get; set; }
        public virtual DbSet<Unit> Units { get; set; }

        ///...///
    } 
1
Ali Jamal

Dans mon cas, mais avec VS 2017, cela s'est produit lorsque toutes mes classes de modèle ont été définies dans un seul fichier .cs. Une fois que j'ai séparé chaque classe dans son propre fichier, le processus de génération s'est correctement terminé.

0
nevh

Si vous essayez de créer un contrôleur Odata  

Aller à la classe DbContext et ensuite vérifier si 

public System.Data.Entity.DbSet<BackEnd.Models.OrganizationType> YourModel{ get; set; }

Disponible ior pas 

Si oui .. Retirez-le et réessayez 

0
Rumesh Madushanka