CodeFirst创建表我正在尝试创建一个新表。publicclassUsersContext:DbContext{publicUsersContext():base("DefaultConnection"){}publicDbSetUserProfiles{get;放;}publicDbSetTestTabel{get;放;}}[Table("UserProfile")]publicclassUserProfile{[Key][DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]publicintUserId{get;放;}publicstring用户名{get;放;}publicstringMobile{get;放;}publicstringFirstName{get;放;}publicstringLastName}}[Table("TestTabel")]publicclassTestTabel{[Key][DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]publicintTestId{get;放;}publicstringTestName{get;放;}publicstringTestMobile{get;放;}}比起我尝试使用更新数据库命令通过控制台更新数据库,我收到此错误消息:数据库中已经有一个名为“UserProfile”的对象。没有添加新列,也没有表格。我错了怎么了?[编辑]我做了add-migration和update-database命令,这是出来的(必须两次执行update-database命令,第二次使用详细信息)PM>Add-MigrationAdd-Migrationcmdlet在命令管道位置1为以下参数提供值:名称:测试脚手架迁移“测试”。此迁移文件的设计器代码包括当前代码优先模型的快照。此快照用于计算下一次迁移时对模型的更改。如果您对要包含在此迁移中的模型进行其他更改,则可以通过再次运行“Add-Migration201304011714212_test”来重新构建它。PM>Update-Database项目“MVC4SimpleMembershipCodeFirstSeedingEF5”构建失败。PM>Update-Database指定'-Verbose'标志以查看应用于目标数据库的SQL语句。应用基于代码的迁移:[201304011714212_test]。应用基于代码的迁移:201304011714212_test。运行种子方法。下午>更新数据库-详细使用启动项目“MVC4SimpleMembershipCodeFirstSeedingEF5”。使用NuGet项目“MVC4SimpleMembershipCodeFirstSeedingEF5”。指定“-Verbose”标志以查看应用于目标数据库的SQL语句。目标数据库是:'aspnet-MVC4SimpleMembershipCodeFirstSeedingEF5'(数据源:.,提供者:System.Data.SqlClient,来源:配置)。没有挂起的基于代码的迁移。运行种子方法。PM>[/编辑]Configuration.cs:namespaceMVC4SimpleMembershipCodeFirstSeedingEF5.Migrations{内部密封类Configuration:DbMigrationsConfiguration{publicConfiguration(){AutomaticMigrationsEnabled=true;}protectedoverridevoidSeed(UsersContextcontext){WebSecurity.InitializeDatabaseConnection("DefaultConnection","UserProfile","UserId","UserName",autoCreateTables:true);如果(!Roles.RoleExists("管理员"))Roles.CreateRole("管理员");如果(!WebSecurity.UserExists("test"))WebSecurity.CreateUserAndAccount("test","password",new{Mobile="+19725000374",FirstName="test",LastName="test"});if(!Roles.GetRolesForUser("test").Contains("Administrator"))Roles.AddUsersToRoles(new[]{"test"},new[]{"Administrator"});}}}在Filters文件夹1cs文件中:namespaceMVC4SimpleMembershipCodeFirstSeedingEF5.Filters{[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=false,Inherited=true)]publicsealedclassInitializeSimpleMembershipAttribute:ActionFilterAttribute{privatestaticSimpleMembershipInitializer_initializer;privatestaticobject_initializerLock=newobject();privatestaticbool_isInitialized;公共覆盖无效OnActionExecuting(ActionExecutingContextfilterContext){//确保ASP.NETSimpleMembership在每次应用启动时只初始化一次LazyInitializer.EnsureInitialized(ref_initializer,ref_isInitialized,ref_initializerLock);}privateclassSimpleMembershipInitializer{publicSimpleMembershipInitializer(){Database.SetInitializer(null);try{using(varcontext=newUsersContext()){if(!context.Database.Exists()){//创建没有EntityFramework迁移架构的SimpleMembership数据库((IObjectContextAdapter)context).ObjectContext.CreateDatabase();}}WebSecurity.InitializeDatabaseConnection("DefaultConnection","UserProfile","UserId","UserName",autoCreateTables:true);}catch(Exceptionex){thrownewInvalidOperationException("无法初始化ASP.NET简单成员数据库。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=256588",ex);}}}}}连接字符串:上次迁移:namespaceMVC4SimpleMembershipCodeFirstSeedingEF5.Migrations{usingSystem;使用System.Data.Entity.Migrations;公共部分类测试:DbMigration{publicoverridevoidUp(){CreateTable("dbo.TestTabel",c=>new{TestId=c.Int(nullable:false,identity:true),TestName=c.String(),TestMobile=c.String(),}).PrimaryKey(t=>t.TestId);}publicoverridevoidDown(){DropTable("dbo.TestTabel");}}}我只是想把所有东西放在这里作为让你的代码优先和迁移继续进行的一步-解决可能发生或可能不会发生的各种问题注意:code-first已经被证明是非常可靠的——而且它可以用实时场景来解决——你只需要知道你在做什么。最有可能的是,您的迁移和数据库基本上不同步。您现有的迁移尝试针对数据库的旧副本运行-我猜是针对“空数据库”优化的上/下。您需要针对附加的Db副本运行迁移(添加迁移)——这将创建一个“差异”并且只更新您的Db(当然,一定要备份它,因为它可能会丢失/更改等.).或者如果可能的话,清空你的Db-然后重新开始。或者,如果实时Db-创建迁移-并在您的开发机器上运行Update-Database-Script-以生成完整的Db-或更改(这非常粗糙,您需要根据您的情况进行调整)。然后通过运行脚本应用于您的“实时数据库”。您还可以查看我之前关于同步的帖子...MVC3和CodeFirstMigrations-“自数据库创建以来支持'blah'上下文的模型已经改变”编辑:同时检查这个答案AutomaticMigrationsEnabled是假的还是真的?如果你的做事方式没问题,你可以添加AutomaticMigrationsEnabled=true;到您的配置(也在Migrations文件夹下-为您创建)..我总是采取一些步骤来清理迁移:(先做好备份)-Enable-Migrations-force(仅限第一次-这会删除configuration.cs以及任何“种子”!)-AutomaticMigrationsEnabled=true;-从项目中手动删除现有的迁移(迁移)-此时重建项目-Add-MigrationInitial-Update-Database-Force-Verbose...later(subsequentmigrations):-Add-MigrationSomeOther1-Update-Database-Force-Verbose...让您保持Db同步-即小心“移动Db”、手动调整等(在这种情况下请参阅另一篇文章)结合其他内容:使用PM控制台...-选择您的项目从列表中,-确保你的“主exe”(调用你的数据项目/程序集-或控制平台/应用程序)-被设置为“启动”项目,-始终观察控制台评论-因为它可能正在尝试构建并访问不同的项目。连接:请参阅我的这篇文章,迁移不会更改我的表简而言之-您的连接被命名为您的上下文+您的项目-如果没有另外指定。它来自您的DbConfig构造函数-或app.config(连接)。确保您正在查看“正确的数据库”(即您正在通过一些资源管理器查看的内容以及您首先使用代码连接的内容-可能是两个不同的东西)。构建:确保您的项目设置为“配置”以自动构建——这也可能是一个问题。以上就是C#学习教程:代码先创建表共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
