2013-12-09 6 views
16

Używam VS2013Nie można utworzyć kontroler z Entity Framework - Nie można pobrać Metadane

Kiedy próbuję utworzyć „MVC 5 Kontroler z widokiem użyciu Entity Framework” pojawia się następujący błąd:

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> 

Mam tabeli skonfigurować zwane produkty i ma definicję tak:

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

Any pomysły co się dzieje? Próbowałem wszystkiego, co powróciło w Google.

Pakiety mam zainstalowane:

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

Mój projekt można znaleźć tutaj: https://github.com/jimmyt1988/WebApplication2

+1

Jeśli zbudujesz mój projekt, otrzymasz taki sam wynik, próbując dodać kontroler z widokami struktury encji? nadal nie może go uruchomić! – Jimmyt1988

+0

Nie mogłem użyć narzędzi EF EF w twoim kontekście, miałem komunikat o błędzie na temat dostawcy. Może to nie podoba się istniejącej bazie danych. Stworzyłem DbContext z inną nazwą, która działała bez zarzutu (zadziałał model EF Power Tools Display EDM, który jest moim zwykłym testem kwasowym). Następnie usunąłem twój DbContext i zmieniłem nazwę na moja ... ale potem spróbowałem dodać kontroler i uzyskałem podobny wynik. Myślę, że to błąd rusztowania T4, a nie błąd EF ... – ajd

+0

Dzięki za pomoc kumpla, sussed go jednak, zobacz moją odpowiedź .. doh .. noobie błąd ay – Jimmyt1988

Odpowiedz

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

Zapomniałeś przycisk {get; zestaw; } ... wszystko działa teraz #crying

+0

To może się również zdarzyć, jeśli zapomnisz typowy parametr DbSet ( z DbSet w twojej odpowiedzi). – DavidDraughn

4

Problem może być spowodowany brakiem atrybutu [NotMapped] w jednej z klas modelu.

Gdy przegapiłem atrybut i przebiegłem głowę.

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

To zadziałało dla mnie – Robz

1

Proszę sprawdzić wszystkie modele są zarejestrowane w kontekście

Przykład:

Masz model jak ten

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

Sprawdź wszystkie virtual instancje modelu są zarejestrowane w kontekst jak to

0

Spróbuj ponownie po usunięciu linii poniżej z klasy EFDbContext.

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

Example:

+0

To pytanie już zostało udzielone – Jimmyt1988

0

W moim przypadku, ale przy użyciu VS 2017, miało to miejsce, gdy miałem wszystkie moje klasy modelu zdefiniowane w jednym pliku .cs. Po rozdzieleniu każdej klasy na własny plik proces generowania zakończony poprawnie.

Powiązane problemy