迁移不会改变我的表格

时间:2013-03-31 14:51:08

标签: entity-framework entity-framework-5 ef-migrations

我刚刚在项目中启用了迁移,并向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; }
}

Add-migration AddFieldsForUserProfile并创建了它:

    ...
    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-database -verbose产生了这个输出:

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.

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

修改

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

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

2 个答案:

答案 0 :(得分:1)

你确定你正在寻找合适的Db吗? 虽然看起来如此。你有错误吗?任何特殊权限等。

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

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

...并备份你的旧以防万一。即从头开始重建Db

如果什么都不起作用 - 尝试重新创建,如果你刚刚开始迁移 - 没有其他想法。

至于为什么不同步发生 - 很难说肯定 - 但我猜你也有'两个连接字符串'(或某种程度上)。

  

确保连接字符串的“命名”与您的相同   dbcontext - 或直接在DbContext上建立连接

。它有时是一个问题,因为它不清楚EF / CF'制造'的默认值。

答案 1 :(得分:0)

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

public void CheckForDBChanes()
        {

            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
        }