ASP.NET MVC:错误CS0311:类型'XYZ'不能用作通用方法中的参数'TContext'

时间:2019-12-06 07:46:24

标签: c# asp.net asp.net-mvc asp.net-mvc-5 web-deployment

我正在使用.net MVC。我在项目中已 启用了迁移 ,此操作已成功完成。但是我在 Migrations> Configrations.cs 中遇到错误。错误如下。

CS0311:类型'BabyStore.DAL.StoreContext'不能用作通用类型或方法'DbMigrationsConfiguration'中的类型参数'TContext'。没有从“ BabyStore.DAL.StoreContext”到“ System.Data.Entity.DbContext”的隐式引用转换

我已启用以下迁移

PM>Enable-Migrations -ContextTypeName BabyStore.DAL.StoreContext

BabyStore.DAL.ContextStore.cs的代码是

    namespace BabyStore.DAL
{
    public class StoreContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }

    }
}

最后,出现错误的代码如下 BabyStore.Migrations.Configurations.cs

   namespace BabyStore.Migrations
{

using System.Data.Entity.Migrations;

    internal sealed class Configuration : DbMigrationsConfiguration<BabyStore.DAL.StoreContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(BabyStore.DAL.StoreContext _context)
        {
            var categories = new List<Category>
            {
            new Category { Name = "Clothes"},
            new Category { Name = "Play and Toy" }
            };
            categories.ForEach(c => _context.Categories.AddOrUpdate(p => p.Name, c));
            _context.SaveChanges();

            var products = new List<Product>
            {
            new Product {Name="Sleep Suit", Desccription="For Sleeping wear",Price=100,CategoryID=categories.Single(c=>c.Name=="Clouths").ID },
            new Product {Name="Vest", Desccription="For Sleeping wear",Price=200,CategoryID=categories.Single(c=>c.Name=="Clouths").ID}
             };
            products.ForEach(c => _context.Products.AddOrUpdate(p => p.Name, c));
            _context.SaveChange();

        }
    }
}

内部密封类Configuration:DbMigrationsConfiguration 行中出现错误

2 个答案:

答案 0 :(得分:1)

如何强制迁移?使用-force参数

PM>Enable-Migrations -ContextTypeName BabyStore.DAL.StoreContext -force

我认为这里有拼写错误。把衣服换成衣服

new Product {Name="Sleep Suit", Desccription="For Sleeping wear",Price=100,CategoryID=categories.Single(c=>c.Name=="Cloths").ID },
new Product {Name="Vest", Description="For Sleeping wear",Price=200,CategoryID=categories.Single(c=>c.Name=="Cloths").ID}

我已经检查了您所参考的书,该书是带有Entity Framework CSS的ASP.net MVC,它的仓库是https://github.com/Apress/asp.net-mvc-w-entity-framework-css。如果您检查该程序包,它将使用与.net core不同的“ EntityFramework.6.1.3”。

您可以在Visual Studio中重新创建项目,这次选择ASP.NET Web应用程序(.NET Framework)。问题是由于不同的实体框架包。请参阅此EntityFramework Core automatic migrations,以在asp.net核心上设置自动迁移。

答案 1 :(得分:0)

查看class signature显示出,通用参数TContext被限制为类型DbContext

public class DbMigrationsConfiguration<TContext> : System.Data.Entity.Migrations.DbMigrationsConfiguration where TContext : DbContext

修改您的StoreContext以继承System.Data.Entity.DbContext

public class StoreContext : DbContext