1

我刚刚在我的项目中启用了迁移并添加了一些字段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.

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

编辑

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

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

4

2 回答 2

1

你确定你正在寻找正确的数据库吗?
看起来是这样。你有没有得到任何错误?任何特殊权限等。

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

<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 的默认设置并不明显。

于 2013-03-31T21:38:54.563 回答
0

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

public void CheckForDBChanes()
        {

            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
        }
于 2013-03-31T20:03:35.187 回答