web-dev-qa-db-ja.com

エンティティフレームワークでコントローラを作成できません-メタデータを取得できません

私は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>

Productsというテーブルがセットアップされていて、次のような定義があります。

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

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

{get;を忘れましたセットする; } ...すべての作品が今#crying

8
Jimmyt1988

問題は、モデルクラスの1つに[NotMapped]属性がないことが原因である可能性があります。

私は属性を逃し、頭を狡猾にしていた。

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

EFDbContextクラスから以下の行を削除した後、再試行してください。

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

例:

1
Kunal

すべてのモデルがコンテキストに登録されていることを確認してください

例:

このようなモデルがあります

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

        ///...///
    } 
1
Ali Jamal

私の場合、VS 2017を使用していて、これは、すべてのモデルクラスを単一の.csファイル内で定義したときに発生しました。各クラスを独自のファイルに分離すると、生成プロセスは正しく完了しました。

0
nevh

私にとっては、model.ttファイルとmodel.context.ttファイルを右クリックして「カスタムツールを実行」する必要がありますが、エラーは解決しました。

0
dawncode

Odataコントローラーを作成しようとしている場合

DbContextクラスに移動してから、

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

利用できるかどうか

はいの場合..それを削除してから、再試行してください

0