2017-05-22 41 views
0

我使用數據庫優先與EF ..我的數據庫已經存在,所以我跟着this post ..特別臭的答案。實體類型ApplicationUser不是當前上下文的模型的一部分。更新EDMX

我已經將表格寫入我已經存在的數據庫中。

所以現在我web.config我有這樣的:

<connectionStrings> 
    <!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-test-20170522025552.mdf;Initial Catalog=aspnet-test-20170522025552;Integrated Security=True" providerName="System.Data.SqlClient" />--> 
    <add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <appSettings> 

因此,與創建這個應用程序附帶的初始連接字符串DefaultConnection現在被註釋掉。

在我IdenityModel.cs我現在有這樣的:

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

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

當我嘗試註冊一個用戶。我得到這個:

的實體類型ApplicationUser不是的一部分當前上下文的模型。

只是要清楚..我的現有數據庫確實包含aspnetrolesaspnetuserclaimsaspnetuserloginsaspnetuserrolesaspnetusers表。

我該如何解決這個問題?

UPDATE

整個連接字符串:

<add name="DatabaseNameEntities" connectionString="metadata=res://*/Models.EntityDataModelName.csdl|res://*/Models.EntityDataModelName.ssdl|res://*/Models.EntityDataModelName.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=serverName;initial catalog=databaseName;user id=fake_user;password=fakePassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

UPDATE 2

添加了此連接字符串的web.config:

<add name="NameConnString" connectionString="data source=serverName;initial catalog=databaseName;user id=fake_user;password=fakePassword;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 

然後在我的IdentityModel ..

public ApplicationDbContext() 
    : base("NameConnString", throwIfV1Schema: false) 
{ 
} 
+0

確保您更新通過右鍵單擊EDMX。否則,請參閱[這裏](https://stackoverflow.com/questions/25866700/change-asp-net-identity-to-use-existing-database)。 –

+0

@SteveGreene我已經從數據庫更新了我的EDMX,它仍然給出相同的錯誤。 –

回答

2

以爲這是您的EF EDMX連接字符串:

<add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

上面的連接字符串最有可能引發問題,因爲生成的連接字符串使用的EntityClient代替SqlClient提供商,其EF需要與數據源通信。請注意,您需要包含標準SQL Server connection string,其目標是創建ASP .NET標識表的數據庫。

因此,對於您的數據庫連接字符串正確的設置應該是這樣的:

<connectionStrings> 
    <add name="FakeExistingDBConnectionString" connectionString="xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

的EDMX另一個連接字符串:

<connectionStrings>  
    <add name="FakeExistingDBConnectionEntities" connectionString="metadata=res://*/Models.ModelName.csdl|res://*/Models.ModelName.ssdl|res://*/Models.ModelName.msl;provider=System.Data.SqlClient;provider connection string=&quot;xxxxxxxxxxxxxxx;user id=fake_user;password=fakeUser12;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

此外,在ApplicationDbContext引用的連接字符串應該是指SqlClient提供商連接字符串:

public ApplicationDbContext() 
    : base("FakeExistingDBConnectionString", throwIfV1Schema: false) 
{ 
} 

然後,更新EDMX並確保您可以管理用戶(創建,登錄,更新,密碼重置等)

類似的問題:

ASP.NET/Identity Error: The entity type ApplicationUser is not part of the model for the current context

The entity type ApplicationUser is not part of the model for the current context, DB First with custom user store

+0

看到我的更新與我的完整連接字符串 –

+0

所以我只需要添加一個額外的連接字符串,沒有EF?看到我的更新 –

+0

非常好的解釋。謝謝@Tetsuya Yamamoto – JBaby

相關問題