- 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/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!