当前位置: 首页 > 知识库问答 >
问题:

迁移不会改变我的表

徐正雅
2023-03-14

我刚刚在我的项目中启用了迁移,并在UserProfile中添加了几个字段:

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
    public string Description { get; set;}
    public DateTime? CreatedOn { get; set; }
    public DateTime? LastAccess { get; set; }
}

Iaddmigration addfields ForUserProfile并创建:

    ...
    public override void Up()
    {
        AddColumn("dbo.UserProfile", "Email", c => c.String());
        AddColumn("dbo.UserProfile", "Description", c => c.String());
        AddColumn("dbo.UserProfile", "CreatedOn", c => c.DateTime());
        AddColumn("dbo.UserProfile", "LastAccess", c => c.DateTime());
    }
    ...

Update-数据库-详细产生了以下输出:

Target database is: 'Hifi.Models.HifiContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201303311011083_AddFieldsForUserProfile].
Applying code-based migration: 201303311011083_AddFieldsForUserProfile.
ALTER TABLE [dbo].[UserProfile] ADD [Email] [nvarchar](max)
ALTER TABLE [dbo].[UserProfile] ADD [Description] [nvarchar](max)
ALTER TABLE [dbo].[UserProfile] ADD [CreatedOn] [datetime]
ALTER TABLE [dbo].[UserProfile] ADD [LastAccess] [datetime]
[Inserting migration history record]
Running Seed method.

显然一切都进行得很顺利,但在收到一个错误,即column CreatedOn不存在之后,我用服务器资源管理器查看了数据库,事实上,我的UserProfile表中缺少了所有4个column。我做错了什么?

我发现了我的错误。不知何故,我有两个不同的mdf文件aspnet-Hifi-20130330054424.mdfHifi。模型。HifiContext.mdf具有相同的文件大小,我认为两者都是必要的。我的服务器资源管理器正在使用aspnetxx.mdf,数据库更改为HifiContext.mdf。我真可耻。

在相关说明中,我无法正确显示所有注册用户的列表。它总是空的,尽管我可以完美地登录。以某种方式登录aspnetxx。mdf已被查询,但myMemberListController已被查询HifiContext。mdf。更改连接字符串后,我最初没有注册用户,新用户被添加到HifiContext。mdf和列表工作正常。这是怎么发生的?

共有2个答案

齐英耀
2023-03-14

在启动代码中调用此方法,使用新字段重新创建数据库:

public void CheckForDBChanes()
        {

            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
        }
牟飞沉
2023-03-14

你确定你找的是正确的数据库吗?
不过似乎是这样。你得到任何错误吗?任何特殊权限等。

我的建议是创建一个新连接,例如配置和

<connectionStrings>
    <add name="HifiContext" connectionString="Data Source=MACHINE\INSTANCE;Initial Catalog=HiFi;Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>`

...备份你的旧电脑以防万一。i、 e.从头开始重新创建数据

如果什么都不起作用——如果你只是打开迁移,试着重新创建——没有其他想法。

至于为什么会发生不同步——很难说清楚——但我猜你也有“两个连接字符串”(或者在某种程度上)。

确保您的连接字符串“命名”与您的dbcontext相同,或者直接将连接放在您的at dbcontext上

。这有时是个问题,因为EF/CF的默认值并不明显。

 类似资料:
  • SQLAlchemy变更日志和迁移指南现在集成在主文档中。 当前迁移指南 SQLAlchemy 1.4有什么新功能? SQLAlchemy 2.0概述和状态 迁移到Alchemy 更改日志 1.4变更日志 1.3换热器 1.2换热器 1.1换热器 1换热器 0.9换热器 0.8换热器 0.7换热器 0.6换热器 0.5换热器 0.4换热器 0.3换热器 0.2换热器 0.1换热器 旧的迁移指南 S

  • 我正在为我的java程序使用一个JComboBox,该框的编码如下 其中猫是一个字符串数组。但是,即使我更改了所选索引,getSseltedIndex()方法仍然返回0。请帮忙。

  • 在MainActivity中,我有一个TextView。在这个textView中,有一个数字我保留在SharedPreferences中。并且每隔几分钟SharedPreferences就会用一个报警管理器更改一次,但是我的MainActivity中的SharedPreferences不会更改,任何人都知道为什么吗? 这是MainActivity中代码的一部分 这是警报接收器中的代码

  • 问题内容: 我在MySQL 5.6中更改lower_case_table_names变量值时遇到问题…我做了所有在Windows xampp上更改lower_case_table_names = 2值的说明 。 Windows 7的默认值为“ 1”。我想将其切换为“ 2”。 尝试了几种方法,我所做的是: 编辑C:\ Program Files \ MySQL \ MySQL Server 5.6

  • 我在文件中的迁移中添加了一个新表。。 这是代码: 当我运行时,我的数据库中只有默认的laravel用户(和迁移)表。没有货币。 原因可能是什么? 编辑 迁移一切都很顺利。问题是: SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:更改表用户添加唯一users_email_unique(电子邮件)) SQLSTATE[42000]:语法错误

  • 我从git克隆了一个项目。 在我运行命令后: -作曲家转储-自动加载 -作曲家更新 文件composer.json: 文件evn APP\u ENV=local APP\u DEBUG=true APP\u KEY=SomeRandomString APP\u URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1DB_PORT=330