.NETSTANDARD类库中的实体框架核心迁移?

时间:2018-08-24 20:46:04

标签: c# .net-core entity-framework-core ef-core-2.0 .net-standard-2.0

主要问题:因为我在DataAccess和Entity层中添加了新的实体和数据库集,所以需要更新SQL DB以具有新表。

好的,我的项目如此布置。解决方案> DataAccessLayerProject(数据库上下文),ModelsProject(实体),TesterProject(控制台应用程序)。

控制台应用程序是一种运行DataAccess和实体代码的方法。

以下是图片供参考:

enter image description here

我需要将迁移添加到DataAccessLayer,但是会出现以下错误:

  

PM>添加迁移BazaarDBMigration

     

启动项目'EntFrame.DataAccessLayer'面向框架'.NETStandard'。有   没有与此框架关联的运行时,并且针对它的项目   无法直接执行。使用实体框架核心软件包   使用此项目的Manager控制台工具,添加一个可执行项目   定位引用此项目的.NET Framework或.NET Core,   并将其设置为启动项目;或者,将该项目更新为   跨目标.NET Framework或.NET Core。 PM>

好的,测试控制台应用程序引用了该项目。让我们尝试将其添加到那里。

  

PM> Add-Migration BazaarDBMigration在程序集中找不到DbContext   'EntFrame.TestDriver'。确保您使用的组件正确   而且类型既不是抽象的也不是泛型的。

有什么想法吗?在此先感谢您的宝贵时间和专业知识。 :)

编辑:我尝试了其他类似问题的解决方案,但是添加第二个targetframework将问题推得更远。对不起。

编辑:这是我上下文中的代码

public class BazaarDBContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }
        public DbSet<Sandwhich> Sandwhiches { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            SqlConnectionStringBuilder cnnStringBuilder = new SqlConnectionStringBuilder(ConfigurationManager.ConnectionStrings["BazaarDBContext"].ConnectionString);
            cnnStringBuilder.UserID = ConfigurationManager.AppSettings["SQLConnectionUser"];
            cnnStringBuilder.Password = ConfigurationManager.AppSettings["SQLConnectionPassword"];

            string completedCnnString = cnnStringBuilder.ConnectionString;

            optionsBuilder.UseSqlServer(completedCnnString);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<Student>().HasKey(s => new { s.StudentID_PK, s.StudentID_PK1 });
            modelBuilder.Entity<Student>().Property(s => s.Email).IsRequired();
            base.OnModelCreating(modelBuilder);
        }
    } 

1 个答案:

答案 0 :(得分:1)

我们在项目中进行了精确的设置。

第一个错误是告诉您需要运行时(库项目没有该运行时)。第二个错误是告诉您在要添加迁移的库中需要一个DbContext。两个不同的问题,但这应该可以使您走上正确的轨道:

  1. 打开Powershell并进入您的DataAccessLayer项目的目录
  2. 使用dotnet ef migrations add BazaarDBMigration --startup-project ..\EntFrame.TestDriver添加迁移(假设TestDriver项目是上一级

这会将迁移添加到当前项目目录,并且--startup-project标志指定运行时项目所在的位置。