c# - Entity Framework 的种子方法错误,未在代码优先模型中创建表

标签 c# entity-framework visual-studio-2013 ef-code-first

我在 EF 中使用 Code First 方法。当我尝试从包管理器控制台更新数据库时,出现以下错误。

Running Seed method.
System.ArgumentNullException: Value cannot be null.
Parameter name: set
   at System.Data.Entity.Utilities.Check.NotNull[T](T value, String parameterName)
   at System.Data.Entity.Migrations.DbSetMigrationsExtensions.AddOrUpdate[TEntity](IDbSet`1 set, Expression`1 identifierExpression, TEntity[] entities)
   at AKClasses.Migrations.Configuration.Seed(AKClassDb context) in c:\Users\amol.kshirsagar\Documents\AmolKshirsagar\RnD\MVC\MVC5\AKClasses\AKClasses\Migrations\Configuration.cs:line 19
   at System.Data.Entity.Migrations.DbMigrationsConfiguration`1.OnSeed(DbContext context)
   at System.Data.Entity.Migrations.DbMigrator.SeedDatabase()
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.SeedDatabase()
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Value cannot be null.
Parameter name: set

以下是我的模型类

我的数据库上下文类

using System.Data.Entity;

namespace AKClasses.Models
{
    public class AKClassDb : DbContext 
    {
        public DbSet<Student> Students;
        public DbSet<Subject> Subjects;
    }
}

我的学生类(class)

namespace AKClasses.Models
{
    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

    }
}

我的学科类

using System.Collections.Generic;
namespace AKClasses.Models
{
    public class Subject
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public virtual List<Student> Students { get; set; }
    }
}

编辑:重要的 My Configuration.cs 类

namespace AKClasses.Migrations
{
    using AKClasses.Models;
    using System.Data.Entity.Migrations;

    public sealed class Configuration : DbMigrationsConfiguration<AKClasses.Models.AKClassDb>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
        }

        protected override void Seed(AKClasses.Models.AKClassDb context)
        {

            context.Subjects.AddOrUpdate(c => c.Name, new Subject { Name = "Marathi" }, new Subject { Name = "English" });
        }
    }
}

不知何故,我能够在我的 SSMS 中看到已创建的数据库,但看不到表格。

最佳答案

DbSet<T>应该是属性(property),而不是公共(public)领域。

尝试将它们更改为

public DbSet<Student> Students { get; set; }
public DbSet<Subject> Subjects { get; set; }

关于c# - Entity Framework 的种子方法错误,未在代码优先模型中创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132611/

相关文章:

c# - LINQ 语句获取每个食谱及其成分列表

c# - 如何制作代码片段并将其添加到 Visual Studio 中的 Snippet intellisense?

asp.net-mvc - 由于同一模型类的两个对象而导致 EntityState.Modified 发生冲突?

entity-framework - .WithMany() 和 .WithOptional() 的区别?

c++ - 深度复制具有自引用指针的类

visual-studio-2013 - VS2013 Update 5 由于旧版本的多设备混合应用程序而被阻止

c# - 通过 C# 弹出 USB 设备

c# - 在 WPF 和 C# 中打开现有文本文件

entity-framework - Entityframework 使用 join 方法和 lambda 进行连接

c++ - 在类中声明 vector 大小