2014-09-30 42 views
2

我在網上看到很多示例,但從頭到腳都沒有關於將我自己的DbContext與Asp.net IdentityDbContext進行合併的示例。將MyDbContext合併到Asp.net IdentityDbContext

有人可以通過它走過我嗎?我在第0步,我想要的是由我自己的數據庫中的ASP.net IdentityDbContext生成的表,以便我可以保留用戶數據在我自己的數據庫中。我怎樣才能做到這一點?

Thanx提前:)

+0

可能重複[合併MyDbContext與IdentityDbContext](http://stackoverflow.com/questions/19764233/merge-mydbcontext-with-identitydbcontext) – Arvand 2016-09-26 12:23:34

回答

1

如果我給你改正,你要使用現有的數據庫,表和現有用戶提供asp.net身份框架。

首先,根據我的理解,由於asp.net標識框架表的上下文必須從IdentityDbContext<YourUserTable>繼承,因此無法將db context(MyDbContext)與'IdentityDbContext'合併。但是您的其他表格可能從DbContext繼承。

因此,你必須,如果你想要使用的框架構建方法的支持,這是對的UserManager使用兩個單獨的數據庫環境等

您可以使用身份框架現有的數據庫,你只需要正確綁定您的數據庫表使用身份框架EF代碼第一種方法使用模型綁定。

有一個YouTube視頻教程,可以幫助您獲得一些想法,以實現您的任務。實際上,本視頻演示瞭如何將Identity 2.0與現有數據庫結合使用。

1部分:https://www.youtube.com/watch?v=elfqejow5hM

2部分:https://www.youtube.com/watch?v=JbSqi3Amatw

希望這有助於。

0

這裏有一個步行通過我創造的一部分。有幾個步驟專門針對使其使用代碼優先遷移,但您應該能夠使用這些步驟完成您想要的任務。

首先創建一個新的ASP.NET MVC項目。如果您想要包含的代碼匹配,請撥打它的聯繫人。認證默認爲個人用戶帳戶,這是我們在這種情況下想要的。暫時取消選擇雲中的主機。您可以稍後輸入您的發佈設置。項目創建完成後,打開Package Manager Console和Install-Package EntityFramework。現在我們正在做Code First添加一個簡單的模型類。

public class Contact { 
    public int ContactID { get; set; } 
    public string Name { get; set; } 
    public string Phone { get; set; } 
} 

在這一點上,你通常會添加控制器等,但由於這篇文章的重點是對事物的數據方面,我們會跳過了這一切。接下來我們要添加我們的數據庫上下文。繼續並將其添加到模型名稱空間中。

public class ContactContext : IdentityDbContext { 
    public ContactContext() 
     : base("ContactContext") { 
    } 

    public DbSet<Contact> Contacts { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 

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

有幾件事要注意。由於我們將Identity表合併到應用程序的上下文中,因此我們希望從IdentityDbContext繼承而不僅僅是DbContext。另外,我不想使用在Web中創建的生成的「DefaultConnection」。因此我將「ContactContext」作爲連接字符串名稱傳遞給基礎構造函數。我們將在一分鐘內修改連接字符串。如果您正在輸入OnModelCreating方法,Visual Studio應該將調用添加到base.OnModelCreating中,但如果不確定添加它,因爲它對於構建身份表非常重要。儘管不是必需的,但您可以將modelBuilder配置爲不復用表名稱。添加Identity代碼使用此上下文所需的Create方法。另外,當您添加代碼時,您需要右鍵單擊並解決以添加適當的使用語句。

如承諾的,這裏是修改後的連接字符串,在網站根目錄的web.config中進行更新。 name屬性更改爲對應用程序有意義的內容,並且將AttachDbFilename和Initial Catalog值更改爲比自動生成的名稱更友好一些。

<add name="ContactContext" connectionString="Data Source= 
(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\ContactContext.mdf;Initial 
Catalog=ContactContext;Integrated Security=True" 
providerName="System.Data.SqlClient" /> 

現在轉到Models文件夾並打開IdentityModels.cs文件。從這裏剪下ApplicationUser類並粘貼到你的Contact.cs文件中。再次,你將不得不解決一些缺少的命名空間。此時您可以安全地刪除IdentityModels.cs文件。由於我們已經取消了ApplicationDbContext,因此我們需要在ApplicationDbContext上進行查找,並在幾個地方將其替換爲ContactContext。你應該能夠做一個乾淨的構建。