2010-02-25 142 views
0

我正在使用實體框架3.5。我創建了一個對象,它調用從SQL成員表(aspnet_Users)繼承的「Persons」,它們通過UserId(Guid)以1到(0..1)的關係鏈接,並且它們都屬於「UserSet」。從SQL成員實體框架繼承

說,我已經在會員數據庫中有一個名爲「jsmith」的現有「aspnet_User」。我如何才能在實體框架中創建將其鏈接到「jsmith」的「Person」(子)?

Guid guid = new Guid("xxxx-xxxx-xxx..") // jsmith Guid  
User user = GetUserByGuid(guid);   // Assuming a function gets "jsmith" as "User" 

// Try 1:  
Person person = new Person();  
person.UserId = guid;  
context.AddToUserSet(person);  
context.SaveChanges();  // This doesn't work and throws an error 

// Try 2:  
Person.CreatePerson(person); // Doesn't work either, because it creates a whole new user  
context.SaveChanges();  // Throws an error 

我甚至試圖創建一個EntityKey並使用detach/attach,也沒有工作。我做錯了什麼?任何幫助表示讚賞。

R.B.

回答

2

You should not put SQL membership into your entity mode l。 ASP.NET成員資格旨在可插入;您可以換出一個OpenID或域身份驗證提供程序的SQL成員資格提供程序。映射SQL成員資格表使您完全依賴於該提供程序的一個版本的具體實現,這是不好的耦合。

另外,即使您確實這樣做了,繼承也是錯誤的關係。用戶有一個帳戶。用戶不是的帳戶。所以正確的關係是組合,而不是繼承。

+0

謝謝,實際上這是有道理的。 – 2010-02-25 18:58:21

0

也許「人」在這個例子中是錯誤的關係。但是,如果您正在討論通過添加更多屬性(如「FirstName」,「LastName」等)來擴展ASP.NET memembership,這並非完全錯誤。有一些文章討論擴展SQL成員資格和/或創建「自定義成員資格」,方法是添加自己的數據庫表,然後從基本MembershipUser類繼承。在這種情況下,它是繼承。

有一些文章,談擴大成員,但不是實體,但: http://www.code-magazine.com/Article.aspx?quickid=0703071

更多文章
- codesmart.wordpress.com/2009/03/27/extending-the-microsoft-aspnet -membership-provider/

此外,您可能要考慮使用配置文件作爲替代。