2010-02-25 2 views
0

Entity Framework 3.5를 사용하고 있습니다. SQL 멤버십 테이블 (aspnet_Users)에서 상속 된 "Person"을 호출하는 개체를 만들었습니다.이 개체는 UserId (Guid)와 1 대 1 (0..1) 관계로 연결되어 있으며 둘 다 "UserSet"에 속합니다.SQL 멤버쉽의 Entity Framework 상속

회원 정보 데이터베이스에 이미 "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를 만들고 분리/연결을 사용하려고 시도했으나 작동하지도 않았습니다. 내가 뭐 잘못하고 있니? 어떤 도움을 주셔서 감사합니다.

R.B.

답변

2

You should not put SQL membership into your entity mode리터. ASP.NET 멤버십은 플러그 가능하도록 만들어졌습니다. OpenID 또는 도메인 인증 공급자를 위해 SQL 멤버십 공급자를 교체 할 수 있습니다. SQL 멤버십 테이블을 매핑하면 해당 공급자의 특정 버전 구현에 완전히 의존하게됩니다. 이는 잘못된 연결입니다.

또한이 작업을 수행하더라도 상속 관계가 잘못되었습니다. 사용자 계정이 있습니다. 사용자 이 (가) 계정이 아닙니다. 올바른 관계는 상속이 아니라 구성입니다.

+0

감사합니다. 실제로 의미가 있습니다. –

0

"Person"은이 예에서 잘못된 관계입니다. 그러나 "FirstName", "LastName"등과 같은 속성을 추가하여 ASP.NET memembership을 확장하는 방법에 대해 설명하는 경우에는 완전히 잘못된 것은 아닙니다. SQL 멤버십을 확장하거나 자신 만의 db 테이블을 추가하여 "Custom Membership"을 만들고 기본 MembershipUser 클래스에서 상속 된 기사가 있습니다. 이 경우, 그것은 상속입니다.

가 회원 확장에 대해 이야기 몇 가지 기사,하지만 아니지만 엔티티에 : http://www.code-magazine.com/Article.aspx?quickid=0703071

더 많은 기사
- codesmart.wordpress.com/2009/03/27/extending-the-microsoft-aspnet -membership-provider/

또한 프로필을 다른 방법으로 사용하는 것이 좋습니다.

관련 문제