我刚刚在项目中启用了迁移,并向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.mdf
和Hifi.Models.HifiContext.mdf
文件大小相同,我认为两者都是必要的。我的服务器资源管理器使用aspnetxx.mdf
,数据库更改为HifiContext.mdf
。对我感到羞耻。
在相关说明中,我无法正确显示所有注册用户的列表。它总是空的,尽管我可以完美无误地登录。以某种方式登录aspnetxx.mdf
但我的MemberListController
查询HifiContext.mdf
。更改我的连接字符串后,我最初没有注册用户,新的添加到HifiContext.mdf
并且列表正常工作。这是怎么发生的?
答案 0 :(得分: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'制造'的默认值。
答案 1 :(得分:0)
在启动代码中调用此方法,以使用新字段重新创建数据库:
public void CheckForDBChanes()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());
}