Наследование Entity Framework от членства в SQL - PullRequest
0 голосов
/ 25 февраля 2010

Я использую Entity Framework 3.5. Я создал объект, который вызывает «Persons», который унаследован от таблицы членства SQL (aspnet_Users), они связаны UserId (Guid) с отношением 1-к (0..1), и оба они принадлежат «UserSet».

Скажем, у меня уже есть "aspnet_User" с именем "jsmith" в базе данных участников. Как я могу создать только «Person» (дочерний элемент), который связывает его с «jsmith» в рамках сущности?

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, тоже не сработало. Я делаю что-то не так? Любая помощь приветствуется.

круглодонный

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Вы не должны переводить членство SQL в режим сущности l. Членство в ASP.NET должно быть подключаемым; Вы можете поменять поставщика членства SQL, скажем, на OpenID или провайдера аутентификации домена. Отображение таблиц членства SQL делает вас полностью зависимым от конкретной реализации одной версии этого поставщика, что является плохой связью.

Кроме того, даже если вы это сделали, наследование - это неправильные отношения. Пользователь имеет учетную запись . Пользователь не является учетной записью. Поэтому правильное отношение - это композиция, а не наследование.

0 голосов
/ 01 марта 2010

Возможно, «Личность» - это неправильные отношения в примере. Однако, если вы говорите о расширении членства в ASP.NET путем добавления дополнительных свойств, таких как «FirstName», «LastName» и т. Д., Это не является абсолютно неправильным. В некоторых статьях рассказывается о расширении членства в SQL и / или создании «настраиваемого членства» путем добавления собственной таблицы БД, которая затем наследуется от базового класса MembershipUser. В таком случае это наследство.

В некоторых статьях говорится о расширении членства, но не об Entity: http://www.code -magazine.com / Article.aspx? Quickid = 0703071

Другие статьи
- codesmart.wordpress.com/2009/03/27/extending-the-microsoft-aspnet-membership-provider/

Кроме того, вы можете рассмотреть возможность использования профилей в качестве альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...