- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在关注 this教程,我尝试在 userprofile 表中添加一些新列。我尝试创建一个新表。
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<TestTabel> TestTabel { get; set; }
}
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string Mobile { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
[Table("TestTabel")]
public class TestTabel
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TestId { get; set; }
public string TestName { get; set; }
public string TestMobile { get; set; }
}
然后我尝试使用 update-database 命令通过控制台更新数据库,但我收到了这个错误信息:
数据库中已经有一个名为“UserProfile”的对象。
没有添加新列,也没有添加表格。
我错过了什么?
[编辑]我执行了 add-migration 和 update-database 命令,这就是结果(必须执行两次 update-database 命令,第二次是冗长的)
PM> Add-Migration
cmdlet Add-Migration at command pipeline position 1
Supply values for the following parameters:
Name: test
Scaffolding migration 'test'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201304011714212_test' again.
PM> Update-Database
The project 'MVC4SimpleMembershipCodeFirstSeedingEF5' failed to build.
PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying code-based migrations: [201304011714212_test].
Applying code-based migration: 201304011714212_test.
Running Seed method.
PM> Update-Database -verbose
Using StartUp project 'MVC4SimpleMembershipCodeFirstSeedingEF5'.
Using NuGet project 'MVC4SimpleMembershipCodeFirstSeedingEF5'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'aspnet-MVC4SimpleMembershipCodeFirstSeedingEF5' (DataSource: ., Provider: System.Data.SqlClient, Origin: Configuration).
No pending code-based migrations.
Running Seed method.
PM>
[/编辑]
配置.cs:
namespace MVC4SimpleMembershipCodeFirstSeedingEF5.Migrations
{
internal sealed class Configuration : DbMigrationsConfiguration<UsersContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(UsersContext context)
{
WebSecurity.InitializeDatabaseConnection(
"DefaultConnection",
"UserProfile",
"UserId",
"UserName", autoCreateTables: true);
if (!Roles.RoleExists("Administrator"))
Roles.CreateRole("Administrator");
if (!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文件夹下1个cs文件:
namespace MVC4SimpleMembershipCodeFirstSeedingEF5.Filters
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false,
Inherited = true)]
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
{
private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
private class SimpleMembershipInitializer
{
public SimpleMembershipInitializer()
{
Database.SetInitializer<UsersContext>(null);
try
{
using (var context = new UsersContext())
{
if (!context.Database.Exists())
{
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
}
}
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
catch (Exception ex)
{
throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
}
}
}
}
}
连接字符串:
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
上次迁移:
namespace MVC4SimpleMembershipCodeFirstSeedingEF5.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class test : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.TestTabel",
c => new
{
TestId = c.Int(nullable: false, identity: true),
TestName = c.String(),
TestMobile = c.String(),
})
.PrimaryKey(t => t.TestId);
}
public override void Down()
{
DropTable("dbo.TestTabel");
}
}
}
最佳答案
我只是将所有内容都放在此处,作为让您的代码优先和迁移继续进行的演练 - 解决可能发生或可能不会发生的各种问题。注意:代码优先已被证明是非常可靠的 - 并且也可以通过实际场景解决 - 你只需要知道你在做什么。
Most likely, your migration and the database are basically out-of-sync.
您现有的迁移尝试针对数据库的旧副本运行 - 我猜是针对“空数据库”进行了优化的起伏。
您需要针对您附加到的 Db 的副本运行迁移(添加迁移)——这将创建一个“差异”并使您的 Db 保持最新(始终 make当然要备份,因为它可能会丢失/更改等)。
或者如果可能的话,清空你的 Db - 然后重新开始。
或者如果实时 Db - 创建迁移 - 并在你的开发机器上运行 Update-Database -Script
- 生成完整的 Db - 或更改(这一切都非常粗糙,你需要根据您的情况进行调整)。然后通过运行脚本应用于您的“实时数据库”。
您还可以查看我之前关于同步的帖子...
编辑:
还要检查这个答案 AutomaticMigrationsEnabled false or true?
如果您的操作方式没问题,请将 AutomaticMigrationsEnabled = true;
添加到您的 Configuration
(也在 Migrations 文件夹下 - 为您创建)..
Couple steps I always do to clean migrations:
(最好先备份)
- Enable-Migrations -force(仅限第一次 - 这会删除 configuration.cs 和那里的任何“种子”!)
- AutomaticMigrationsEnabled = true;
- 从项目 (\Migrations) 中手动删除现有迁移
- 此时重建项目
- 添加迁移初始
- 更新数据库 -Force -Verbose
...稍后(后续迁移):
- 添加迁移 SomeOther1
- 更新数据库 -Force -Verbose
...提供你保持你的 Db 同步 - 即小心“移动 Db”,手动调整等(在这种情况下请参阅另一篇文章)
结合其他的东西:
使用 PM 控制台...
- 从列表中选择您的项目,
- 确保你的“主 exe”(调用你的数据项目/程序集 - 或者如果控制台/应用程序是同一个项目) - 被设置为“启动”项目,
- 始终注意控制台评论 - 因为它可能正在尝试构建和访问不同的项目。
连接:
查看我的这篇文章Migration does not alter my table
简而言之——如果没有另外指定,你的连接就像你的上下文+你的项目一样命名。它来自您的 DbConfig 构造函数 - 或 app.config(连接)。确保您正在查看“正确的数据库”(即您通过某些资源管理器查看的内容和代码优先连接到的内容 - 可能是两个不同的东西)。
建筑:
确保您的项目在“配置”中设置为自动构建 - 这也可能是一个问题。
关于c# - 代码先创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747162/
几个月前,我做了一个功能,我的应用程序正在等待用户文档并做出相应的响应。直到我对项目进行优化并将其更新到最新版本之前,它一直是一种魅力。 如果存在用户文档,则流将产生该文档并关闭该流。 如果云Fire
Stack Overflow 有几个 examples其中函数首先获得可升级锁,然后通过升级获得独占访问。我的理解是,如果不小心使用,这可能会导致死锁,因为两个线程可能都获得了可升级/共享锁,然后都尝
这个问题在这里已经有了答案: MVC 4 Code First ForeignKeyAttribute on property ... on type ... is not valid (1 个回答
以下是部分代码。我需要在 finally 子句中关闭资源。我需要先调用 closeEntry() 还是 close()?我收到一些错误消息。 Error closing the zipoutjava.
我想使用 RxJS-DOM 观察 mousewheel 事件,这样当第一个事件触发时,我转发它然后删除所有值,直到后续值之间的延迟超过先前指定的持续时间。 我想象的运算符可能看起来像: Rx.DOM.
版本似乎与安装的不同。 我在 npm install 上收到警告 我将二进制文件安装到我的家庭/开发目录中,但它不适用于 sudo。所以我安装了apt。 (注意:我并没有真正安装,我提取并将路径放在/
我正在尝试展示 GAN 网络在某些指定时期的结果。打印当前结果的功能以前与 TF 一起使用。我需要换成 pytorch。 def show_result(G_net, z_, num_epoch, s
我是一名优秀的程序员,十分优秀!