2016-03-25 3 views
0

私は個々のユーザーアカウント認証を持つMVC5プロジェクトを持っています。私は自分で登録したテストを作って、すべてが動作します。そして、テストために、私はApplicationUserクラスにプロパティを追加しました、今TIは次のようになります。アイデンティティモデルにプロパティを追加し、データベースをマイグレーションする

その後
public class ApplicationUser : IdentityUser 
{ 
    public string NewPropery { get; set; } 

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     return userIdentity; 
    } 
} 

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

私は、Visual Studio 2013年のパッケージマネージャコンソールを開き、実行しました:

PM> Enable-Migrations 
PM> Add-Migration "NewProperty" 
PM> Update-Database 

最初の2つのコマンドはうまく行くが、3番目のコマンドに失敗し、これは誤りです:

System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

データベースはMVCテンプレートによって作成された通常のLocalDbですが、私は、接続文字列を残しますプロジェクトとして作成されたとき:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-NyProject.Web-20160325120840.mdf;Initial Catalog=aspnet-MyProject.Web-20160325120840;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 

ここでエラーが発生しましたか?

UPDATE 1 - スティーブのコメント

た後、私はプロジェクト「スタートアッププロジェクトは、」これは違うエラーThere is already an object named 'AspNetRoles' in the database.が生成されます作り、パッケージマネージャコンソールでプロジェクトを選択するために使用します。 これは本当です。既存のテーブルを削除する必要がありますか?自分のデータはどうですか?

+0

まず、接続文字列としてマークされたプロジェクトであることを確認しますスタートアッププロジェクト。詳細を表示するには、update-database -Verboseを実行してください。 –

+0

'データベースには「AspNetRoles」という名前のオブジェクトが既にあります。「彼は私をキディンしていますか?もちろんそうだ。移行前にすべてのテーブルを削除する必要がありますか?私のデータはどうですか? –

答えて

0

EFがすべてのオブジェクトを作成する必要があると考えてベースライン初期移行を確立していないため、このエラーが発生しています。これは、コードに基づいてモデルを構築し、最後の移行に保存されたスナップショットと比較するためであるので、この試してみてください。

1) Comment out the new field. 
2) Delete the existing migration. 
3) Add a baseline migration: add-migration Initial -IgnoreChanges 
4) update-database (now EF has a snapshot to compare changes to). 
5) add-migration NewProperty 
6) update-database 

EF Under the Hood