2013-12-09 6 views
16

abzurufen ich VS2013Kann nicht-Controller mit Entity Framework erstellen - Unable Metadaten

Verwendung Wenn ich versuche, eine „MVC 5-Controller mit Ansichten mit Entity Framework“ erstellen ich die folgende Fehlermeldung erhalten:

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> 

Ich habe eine Tabelle aufgebaut Produkte genannt und es hat eine Definition wie folgt:

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

Beliebig Ideen, was schief läuft? Ich habe alles versucht, was bei Google zurückgekehrt ist.

Pakete Ich habe installiert:

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

Mein Projekt finden Sie hier: https://github.com/jimmyt1988/WebApplication2

+1

Wenn Sie mein Projekt erstellen, erhalten Sie das gleiche Ergebnis, wenn Sie versuchen, einen Controller mit Entity-Framework-Ansichten hinzuzufügen? kann es immer noch nicht zur Arbeit bringen! – Jimmyt1988

+0

Ich konnte die EF Power Tools nicht in Ihrem Kontext verwenden, ich hatte eine Fehlermeldung über den Anbieter. Vielleicht mochte es die vorhandene Datenbank nicht. Ich habe einen DbContext mit einem anderen Namen erstellt, der gut funktioniert (das EF Power Tools Display-EDM-Modell hat funktioniert, das ist mein üblicher Säuretest). Ich habe dann Ihren DbContext gelöscht und meinen umbenannt ... aber dann habe ich versucht, einen Controller hinzuzufügen und habe ein ähnliches Ergebnis erhalten. Ich denke, es ist ein T4-Gerüst Fehler nicht ein EF-Fehler ... – ajd

+0

Danke für die Hilfe Kumpel, sussed es aus, siehe meine Antwort .. doh .. noobie Fehler ay – Jimmyt1988

Antwort

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

vergessen die {get; einstellen; } ... alle funktioniert jetzt #crying

+0

Dies kann auch passieren, wenn Sie DbSet generischen Typparameter vergessen ( von DbSet in Ihrer Antwort). – DavidDraughn

4

Problem kann wegen fehlender [NotMapped] Attribut in einer der Modellklasse sein.

Als ich das Attribut verpasste und mir den Kopf schlau machte.

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

Das funktionierte für mich – Robz

1

Bitte überprüfen Sie alle Modelle sind in Zusammenhang registriert

Beispiel:

Sie haben ein Modell wie dieses

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

Überprüfen Sie alle virtual Modellinstanzen in in Zusammenhang registriert sind, wie dies

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

     ///.../// 
    } 
0

Versuchen Sie es erneut, nachdem Sie die Zeile aus Ihrer EFDbContext-Klasse gelöscht haben.

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

Example:

+0

Diese Frage wurde bereits beantwortet – Jimmyt1988

0

In meinem Fall, aber unter Verwendung von VS 2017, dies geschah, als ich in einer einzigen CS-Datei definiert alle meine Modellklassen hatte. Sobald ich jede Klasse in eine eigene Datei getrennt habe, ist der Generierungsprozess korrekt abgeschlossen.

Verwandte Themen