Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
737 views
in Technique[技术] by (71.8m points)

entity framework - Migration does not alter my table

I just enabled migrations in my project and added a few fields to 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; }
}

I Add-migration AddFieldsForUserProfile and it created:

    ...
    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 yielded this output:

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.

Apparently all went well, but after recieving an error that the coloumn CreatedOn does not exist, I looked into the database with the Server Explorer and indeed, all 4 coloumns are missing in my UserProfile table. What did I do wrong?

Edit

I found my error. Somehow I had two different mdf files aspnet-Hifi-20130330054424.mdf and Hifi.Models.HifiContext.mdf which had the same file size and I assumed both were necessary. My Server Explorer was using the aspnetxx.mdf and the database changes were made to HifiContext.mdf. Shame on me.

On a related note I had trouble correctly displaying a list of all registered users. It was always empty altough I could login flawlessly. Somehow for login aspnetxx.mdf was queried but my MemberListController queried HifiContext.mdf. After changing my connection string I had initially no registered users, new ones were added to HifiContext.mdf and the list worked properly. How did this happen?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

are you sure you're looking at the right Db?
it seems so though. Did you get any errors? Any special permissions etc.

My advice is to create a new connection - e.g. config and

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

...and backup your old just in case. i.e. recreate Db from scratch

If nothing works - try recreating if you just turned migrations on - no other ideas.

As for why the out-of-sync happened - hard to say for sure - but I'm guessing you had 'two connection strings' as well (or at some level).

Make sure that you connection string is 'named' the same as your dbcontext - or put connection at your at DbContext directly

. It is sometimes a problem, as it's not apparent what the EF/CF 'makes' as its default.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...