有一个项目,需要将表添加到其中。一切都会好起来的,只是在我做 drop database 之后,表没有出现在数据库中,好吧,我可以理解得到一个异常。(我补充说是的,当我启动项目时表没有出现,我认为删除 DBMS 会强制创建它,为此我删除了 subd)MySQL 基础。现在了解更多详细信息...在 Entities\DataBase 文件夹中添加了一个表
namespace MyProj.Domain.Entities.Database{
public class Company{
[Key]
public int Id { get; set; }
[MaxLength(255)]
public String Name { get; set; }
}}
继续前行。文档说要查看 Entities\Migrations\Configuration.cs,我看...
internal sealed class Configuration : DbMigrationsConfiguration<MyProj.Domain.Concrete.MysqlEfDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
CodeGenerator = new MyCodeGenerator();
}
我走进MysqlEfDbContext
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class MysqlEfDbContext : DbContext
{
public DbSet<Company> Companies { get; set; } // Дописал сюда таблицу,
// тут аналогично находятся другие таблицы
public DbSet<User> Users { get; set; }
}
是的,该类MyCodeGenerator
- 不包含对表的引用。没发布,没看到有什么特别的,方法Generate
和调用的拦截。StripDbo
在更改之前 - 数据库、表已创建并且一切正常。更改后,创建了一个没有新表的数据库,并且出现了异常
无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。
好吧,既然他们写true
了——顺其自然,我们就说吧 AutomaticMigrationsEnabled = true;
。然后我得到另一个错误
表 'concreteperiods' 已经存在。
(这是要创建的第一个表的名称)。公司表现已创建。第一个和第二个错误都出现在这里:
var user = (_repository.Users != null)?_repository.Users.
ToList().FirstOrDefault(x => x.Username.Equals(model.UserName)
&& x.Password.Equals(model.Password)) : null;
我看看是什么_repository
namespace MyProj.WebUI.Controllers
{
public class AccountController : Controller
{
private IProductRepository _repository;
readonly IAuthProvider _authProvider;
public AccountController(IAuthProvider auth, IProductRepository repo)
{
_repository = repo;
_authProvider = auth;
}
没有AccountController
链接。
阅读有关迁移的信息。现在是移民的故事。
在控制台启用迁移。Studio zero - 出现错误 - 我不知道命令。在项目上制作鼠标右键-> 恢复包。启用迁移
PM> Enable-Migrations
Code First Migrations enabled for project MyProj.Domain.
PM> Add-Migration "company"
The project 'MyProj.Domain' failed to build.
我查看了项目 - 我在根目录中创建了另一个 Migrations 文件夹,其中还有另一个 Configuration.cs 文件 - 结果 - 项目不会,因为 Configuration 类被声明了两次。删除,重复添加迁移“公司”我得到一个错误更有趣......
PM> Add-Migration "company" System.NullReferenceException:对象引用未指向对象的实例。在 MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection 连接) 在 System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection 连接) 在 MySql.Data.Entity.MySqlManifestTokenResolver.ResolveManifestToken(DbConnection 连接) 在 ... System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Run() 到 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 到 System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate) 到 System.Data.Entity.Migrations.Design.ToolingFacade。在 System.Data.Entity.Migrations.Design.ToolingFacade.Scaffold 运行(BaseRunner runner)(字符串迁移名称,字符串语言,
EntityFramework 版本 6.0.0.0,运行时 v 4.0.30319
VS 2017
您还能看到什么,是否有需要在“第一次启动”时创建的表列表?
添加新表后,您必须创建迁移。
我们进入包管理器控制台(Pkgmgr.exe):
Enable-Migrations
- 启用迁移。Add-Migration "Название"
- 添加新的迁移。Update-Database
- 数据库更新。更新:或者您可以创建自己的初始化程序,从它继承,
DropCreateDatabaseAlways<T>
并在每次运行时重新创建基础(丢失数据)。