2010-09-21 117 views
0

我正在寫一個自定義的.NET MembershipProvider(不是內置的),並試圖使用實體框架進行更新。但是,我當然沒有訪問(嘗試)UpdateModel。我如何更新它?提前致謝。如何簡單地在實體框架中更新實體?

+0

我已更新您的Q以包括您擁有自定義會員供應商的事實。因爲不知道,我的回答基本上是浪費時間。 – RPM1984 2010-09-21 22:16:26

回答

0

要使用默認的供應商做,這是一個有點複雜,但是這將是更容易將創建自己的CustomMembershipProvider所列出的位置:

Implementing A Membership Provider

正如你可以做到這一點你自己的您可以編碼存儲庫/ DAL代碼,然後使用標準EF實踐和慣例,使您可以執行簡單且強大的映射操作,例如UpdateModel。

+0

我想要做的是寫我自己的會員供應商,但我不知道如何從那裏更新我的EF實體。 – Agares 2010-09-21 11:09:32

+0

啊,你需要什麼,爵士。是DAL層還是Repository,我強烈推薦使用Dane Morgridge的這個例子,他提供了T4模板,只需將它放在與EDMX模型相同的文件夾中,然後運行,它將爲您的模型生成數據存儲庫(或者至少可以自定義的骨骼)。 http://geekswithblogs.net/danemorgridge/Default.aspx – JTrott 2010-09-21 13:19:50

+0

@Agares,編寫自己的會員供應商與更新EF實體無關 - 這是一種標準的EF技術,只是看看周圍,你會找到大量的例子。 – RPM1984 2010-09-21 22:18:51

2

您無法使用ASP.NET成員資格提供程序執行此類事情,即將自定義更新寫入表中。

如果那麼簡單,那麼很少有人會遇到問題/問題。 =)

甚至不用擔心在您的EDMX上添加ASP.NET成員SQL表 - 您不會知道這些關係或表如何真正協同工作。忘記試圖將其表現爲「模型」。

我的建議是不要嘗試綁定到MembershipProvider作爲Model(即不創建強類型視圖),只需直接從您的控制器調用Membership方法即可。

這是我們開始錯過Web窗體的「拖放」的地方,不能放在ChangePassword控件上。 =)

最好的辦法是創建一個普通的視圖(不是強類型的),然後定期按鈕發佈到你的控制器方法。

不要試圖以模型的形式傳遞對象,請在Request.Form集合中獲取字段。

[HttpPost] 
public ActionResult ChangePassword() 
{ 
    string userName = Request.Form["userName"]; 
    string passWord = Request.Form["passWord"]; 
    MembershipProvider.ChangePassword(userName, password);  
    return View("ChangePasswordSuccess"); 
} 

上述代碼將(大致)等同於傳遞強類型的用戶對象,更改密碼並調用UpdateModel。

當然,你可以實現自己的會員供應商,但我不相信,實現自定義的供應商只是爲了讓你的代碼「更容易」應該是司機,因爲除非正確編碼的(這是不容易做到) ,您會損害我們認爲理所當然的ASP.NET會員提供商的許多內置安全功能和豐富的帳戶管理選項。

+0

+1。 [不要映射會員表](http://blogs.teamb.com/craigstuntz/2010/03/05/38558/) – 2010-09-21 13:20:59