我有基於EF Code First的模型,我希望將它們與默認的MembershipProvider一起使用,但我不知道如何正確編寫模型,所以當有數據時,它不會清除所有重新創建表的數據對模型所做的更改。如何使用EF Code First的會員供應商?
回答
當前(EF 4.1 CTP)EF Code First沒有該選項。如果您對模型進行了更改,它總是會刪除一個表格。
更新:
EF 4.1 RTM允許您創建一個自定義數據庫初始化,並指定數據庫對象和數據播種的創建。
如果您正在使用SQL Server,然後檢查:
http://www.paragm.com/ef-v4-1-code-first-and-asp-net-membership-service/
鏈接不再有效! – OverMars 2014-02-10 22:53:08
看一看這個項目
http://codefirstmembership.codeplex.com/
它擁有用戶和角色的實體類,以及作爲角色提供者和成員實施者。如果在datacontext類中包含用戶和角色,則將在數據庫中創建表。
還有我的庫,它基本上允許你定義幾乎所有東西都應該被配置,包括:鍵類型,你的上下文對象的位置以及用戶/角色實體的位置。使用抽象基類或接口可擴展。使用存儲庫模式/工作單元/ IoC容器也能很好地工作。
你的問題有兩個部分。
- 如何首先使用帶有EF代碼的asp.net成員資格API?
- 如何在模型更改時保留現有數據?
至於如何在模型更改時保留現有數據,至於EF 4.0/asp.net mvc 3,尚不支持數據庫遷移。你將不得不轉移到支持數據庫遷移的asp.net mvc 4.0/EF 4.3或使用類似的替代品,但它仍然是beta版本。
asp.net mvc 4.0 database migration in scott gu's blog
現在來點如何第一次使用asp.net成員提供與EF代碼。有幾個挑戰:
我們不能/不應該使用asp.net成員資格提供程序表進行連接。它不被推薦,所以我的建議是爲asp.net會員提供者類創建一個「適配器類」。對於前:
public class UserAdapter { // all user related attributes. Not stored in membership schema, but your schema public string UserProxyName; // some attributes stored in membership schema [NotMapped] public string Email { get { Membership.GetUser(UserProxyName).Email; } } // some attributes stored in membership schema and not in your schema [NotMapped] public string[] UserRoles { get { return Roles.GetRolesForUser(UserProxyName); } } }
現在更新的信息,你可以寫一些函數模型本身,但是我建議建立一個UserRepository與倉庫的設計模式處理用戶CRUD操作。
第二個挑戰是如何在第一次運行時創建數據庫。當播種成爲一個問題時,如果你想播種用戶信息,那麼單獨運行aspnet_regsql效率不高,因爲在播種發生之前預期會員模式。我碰到這個好文章,有一些微調它的工作對我來說:
在我DbContext.cs文件我有一個種子功能,我叫ApplicationServices.InstallServices()
安裝ASP.NET我的數據庫成員資格。現在,每當我的初始化器刪除數據庫時,它都會重新創建ASP.NET成員資格模式。
public class PanelInitializer : DropCreateDatabaseAlways<PanelContext>
{
protected override void Seed(PanelContext context)
{
//Install ASP.NET Membership
ApplicationServices.InstallServices(SqlFeatures.Membership | SqlFeatures.RoleManager);
new List<Panel>
{
的ApplicationServices類
using System.Configuration;
using System.Data.SqlClient;
using System.Web.Management;
namespace Lansw.Panels.DataAccess.Contexts
{
public class ApplicationServices
{
readonly static string DefaultConnectionString = ConfigurationManager.AppSettings["DefaultConnectionString"];
readonly static string ConnectionString = ConfigurationManager.ConnectionStrings[DefaultConnectionString].ConnectionString;
readonly static SqlConnectionStringBuilder MyBuilder = new SqlConnectionStringBuilder(ConnectionString);
public static void InstallServices(SqlFeatures sqlFeatures)
{
SqlServices.Install(MyBuilder.InitialCatalog, sqlFeatures, ConnectionString);
}
public static void UninstallServices(SqlFeatures sqlFeatures)
{
SqlServices.Uninstall(MyBuilder.InitialCatalog, sqlFeatures, ConnectionString);
}
}
}
感謝@ImarSpaanjaarshttp://imar.spaanjaars.com/563/using-entity-framework-code-first-and-aspnet-membership-together。
- 1. EF Code First和ASP.NET會員供應商
- 2. EF 4.1 Update 1 Code First + ASP.NET會員供應商
- 3. 與EF的ASP.NET會員供應商
- 4. 使用EF Code First的SQLite
- 5. 如何在EF Code First中使用LinTY?
- 6. 使用Code First和EF
- 7. 會員供應商
- 8. EF Code First - IsConcurrencyToken()
- 9. 會員供應商
- 10. 會員供應商
- 11. EF Code First Drop Database?
- 12. EF Code First「Transactional Issue」
- 13. EF Code First部署
- 14. EF Code First Readonly列
- 15. Fluent Code First EF 4.3
- 16. Facebook與會員供應商?
- 17. asp.net mvc - 會員供應商
- 18. ASP.NET MVC會員供應商
- 19. EF POCO和EF Code First有何區別?
- 20. ASP.NET會員供應商
- 21. 會員供應商使用情況
- 22. 代碼第一會員供應商
- 23. 定製會員供應商
- 24. WCF會員供應商
- 25. 如何下載會員供應商?
- 26. 如何自定義會員供應商
- 27. 如何微調會員供應商?
- 28. ASP.Net會員供應商
- 29. 測試會員供應商
- 30. LDAP與自定義會員供應商
請展開:您是否嘗試通過代碼首先自己創建成員資格數據庫,而不是使用.NET安裝的SQL腳本? – Richard 2011-01-23 16:16:50
Db是使用aspnet_regsql生成的,但我不知道如何使用EF Code First功能加入它,就像我創建模型/類時一樣,EF生成表格。現在它將清除由aspnet_regsql創建的所有表。 – Santas 2011-01-23 16:23:57