主要问题:因为我在DataAccess和Entity层中添加了新的实体和数据库集,所以需要更新SQL DB以具有新表。
好的,我的项目如此布置。解决方案> DataAccessLayerProject(数据库上下文),ModelsProject(实体),TesterProject(控制台应用程序)。
控制台应用程序是一种运行DataAccess和实体代码的方法。
以下是图片供参考:
我需要将迁移添加到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);
}
}
答案 0 :(得分:1)
我们在项目中进行了精确的设置。
第一个错误是告诉您需要运行时(库项目没有该运行时)。第二个错误是告诉您在要添加迁移的库中需要一个DbContext
。两个不同的问题,但这应该可以使您走上正确的轨道:
DataAccessLayer
项目的目录dotnet ef migrations add BazaarDBMigration --startup-project ..\EntFrame.TestDriver
添加迁移(假设TestDriver
项目是上一级这会将迁移添加到当前项目目录,并且--startup-project
标志指定运行时项目所在的位置。