2013-12-09 33 views
16

我使用VS2013不能与实体框架创建控制器 - 无法检索元数据

当我尝试“使用实体框架MVC 5控制器,享有”我收到以下错误创建

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> 

我已成立了一个名为表产品,它有像这样一个定义:

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

任何想法出了什么问题?我尝试了所有在Google上返回的内容。

包我已经安装:

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

我的项目可以在这里找到:https://github.com/jimmyt1988/WebApplication2

+1

如果你们构建我的项目,试图添加一个控制器与实体框架视图时,你会得到相同的结果吗?仍然无法实现它的工作! – Jimmyt1988

+0

我无法在您的上下文中使用EF Power Tools,我有关于提供者的错误消息。也许它不喜欢现有的数据库。我创建了一个不同名称的DbContext(EF Power Tools Display EDM Model起作用,这是我通常的酸性测试)。然后我删除了你的DbContext并重新命名了我的...但后来我尝试添加一个控制器并得到了类似的结果。我认为这是一个T4脚手架的错误,而不是一个EF错误... – ajd

+0

感谢您的帮助哥们,虽然它出来,但看到我的答案.. doh .. noobie错误ay – Jimmyt1988

回答

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

忘记了{获得;组; } ...现在所有作品#crypting

+0

这也可能发生,如果你忘记DbSet的泛型类型参数 from DbSet in your answer)。 – DavidDraughn

4

问题可能是因为缺少[NotMapped]属性在模型类之一。

由于我错过了这个属性,我狡my了我的头。

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

这工作对我来说 – Robz

1

请检查所有的车型都登记在上下文中

例子:

你有这样

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

检查所有virtual模型实例登记在上下文中像模特这

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

从您的EFDbContext类中删除以下行后重试。

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

Example:

+0

这个问题已经回答 – Jimmyt1988

0

在我的情况,但使用VS 2017年,这种情况发生时,我有一个cs文件中定义的所有我的模型类。一旦我将每个类分离到自己的文件中,生成过程就可以正确完成。