19

I'm using VS2013

When I try to create an "MVC 5 Controller with views using entity Framework" I get the following error:

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>

I have a Table set up called Products and it has a definition like so:

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

Any ideas what is going wrong? I have tried everything that has returned on Google.

Packages I have installed:

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

My project can be found here: https://github.com/jimmyt1988/WebApplication2

3
  • 1
    If you guys build my project, do you get the same result when trying to add a controller with entity framework views? still can't get it to work! Commented Dec 9, 2013 at 23:32
  • I could not use the EF Power Tools on your context, I had an error message about the provider. Maybe it didn't like the existing database. I created a DbContext with a different name which worked fine (the EF Power Tools Display EDM Model worked, which is my usual acid test). I then deleted your DbContext and renamed mine... but then I did try to add a controller and got a similar result. I think it's a T4 scaffolding error not an EF error... Commented Dec 9, 2013 at 23:58
  • Thanks for the help buddy, sussed it out though, see my answer.. doh.. noobie error ay Commented Dec 10, 2013 at 0:03

7 Answers 7

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

Forgot the { get; set; }... all works now #crying

Sign up to request clarification or add additional context in comments.

1 Comment

This can also happen if you forget DbSet's generic type parameter (<Product> from DbSet<Product> in your answer).
4

Problem may be because of missing [NotMapped] Attribute in one of the model class.

As I missed the attribute and I was cunning my head.

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

Comments

2

Please check all the Models are registered in context

Example:

You have a Model like this

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

Check all virtual Model instances are registered in in context like this

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

        ///...///
    } 

Comments

1

Re-Try after deleting below line from your EFDbContext class.

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

Example:

Comments

0

In my case, but using VS 2017, this occurred when I had all my model classes defined within a single .cs file. Once I separated each class out into its own file the generation process completed correctly.

Comments

0

If you trying to create a Odata controller

Go to DbContext class and then check whether

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

Available ior not

If yes .. remove it and then retry

Comments

0

For me, I have to "run custom tool" by right click on model.tt and model.context.tt files, then error got resolved.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.