2015-02-08 47 views
2

我一直在試圖將標準的ASP.NET SimpleMembership(SM)類加載到我的EntityFramework(EF)模型中,但仍然運行到幾個磚牆。我想在我的模型中使用UserProfile表作爲類將應用程序綁定到特定用戶,然後讓管理員決定哪個用戶可以查看/編輯特定應用程序。我可以將SimpleMembership類加載到EntityFramework中嗎?

我現在正在執行的方式是在運行時通過.mdf文件運行EF生成的.sql。ASP在運行時附加到數據庫。然後在EF中運行「從數據庫更新模型」。結果如下圖:

Blue=My EF classes/Green=imported ASP SM classes

User類應與用戶配置(和角色用戶類型)所取代,但這不會因爲EF用戶配置和SM之間的用戶配置模糊運行。 ASP的內部代碼似乎無法來處理:

CLR類型到EDM類型的映射是模棱兩可的,因爲多個CLR 類型匹配EDM類型「用戶配置」

我試圖重新命名UserProfile實體類似於aspnet_UserProfile,但它導致EF無法找到相應的表(因爲它仍然被命名爲UserProfile,應該是因爲這是SM讀取的地方)。

這甚至可能嗎?或者我從錯誤的角度來看待這個問題?

小問題:與aspnet_regsql.exe工具添加的類相比,爲什麼標準MVC項目使用這麼小的.mdf文件?

回答

0

EF不允許您只有名稱空間不同的類。您可以像對待那樣重命名實體,但更改映射,以便表名仍爲UserProfile。 見mapping details window。另一個選擇是讓映射保持不變(在更改實體名稱後,您的表名與「UserProfile」不同),並在初始化您的身份提供商WebSecurity.InitializeDatabaseConnection時指定它。

您看到的表格是簡化的,並且比舊的SQL Membership(aspnet_regsql)方式允許更好的集成。如果您想了解新的身份和成員背景的更多信息,請參閱Introduction to ASP.NET Identity

0

注意到簡單Memebership提供隨附:

  • 這是很難在一個非關係 店堅持會員制數據。
  • 你不能在OWIN中使用它。
  • 它不適用於現有的ASP.NET成員資格提供程序,並且 它不可擴展。

實體框架只使用類名來標識在EDMX中映射的類型,並且名稱空間被忽略 - 這是允許將來自不同名稱空間的類映射到單一模型的約定。從你的描述來看,你似乎有兩個相同的命名實體,由於我上面提到的原因,它會拋出錯誤。

但是你能說出你的班BLL不同(你已經使用的類具有相同的名稱 - EF只使用類名來識別EDMX(命名空間被忽略)映射的類型),並重新命名實體的解決方法。

相關問題