_ {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
public class EFDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
J'ai oublié le {get; ensemble; } ... tout fonctionne maintenant #crying
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; }
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; }
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; }
///...///
}
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é.
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