Проблемы с членством в MVC - C #, EntityFramework - PullRequest
3 голосов
/ 08 июня 2011

Получение странной ошибки после того, как я попытался расширить поставщик членства MVC в моем проекте MVC3 с первым кодом.

Ошибки:

EntityType 'MembershipUser' has no key defined. Define the key for this EntityType.

EntitySet "MembershipUsers" is based on type "MembershipUser" that has no keys defined

Я установил стандартное членство в asp.net, но добавил дополнительную таблицу и модель под названием UserDetails, где внешний ключ - это поле UserId в aspnet_Users.

Как только запись была вставлена ​​в таблицу пользователей, я получаю UserId и пытаюсь ввести другие данные в таблицу Useretails, но именно тогда появляются эти ошибки. Вот другой соответствующий код. AccountController:

if (createStatus == MembershipCreateStatus.Success)
            {                    
                //Add other user details
                UserRepository _user = new UserRepository();
                UserDetails userDetails = new UserDetails();

                userDetails.EmployeeNumber = Request.Form["EmployeeNumber"];
                userDetails.Title = Request.Form["Title"];
                userDetails.FirstName = Request.Form["FirstName"];
                userDetails.Initials = Request.Form["Initials"];
                userDetails.Surname = Request.Form["Surname"];
                userDetails.Nino = Request.Form["Nino"];

                _user.AddUserDetails(userDetails, model.Email);
                return RedirectToAction("Welcome", "Home");
            }

UserRepository:

    public MembershipUser GetUserByEmail(string email)
    {
        MembershipUser user = Membership.GetUser(email);
        return user;
    }


    public void AddUserDetails(UserDetails userDetails, string email)
    {
        MembershipUser user = GetUserByEmail(email);
        Guid userGuid = (Guid)Membership.GetUser(email).ProviderUserKey;
        userDetails.UserID = userGuid; //Add UserID foreign key
        using (IntranetApplication db = new IntranetApplication())
        {
            db.UserDetails.Add(userDetails);
            db.SaveChanges();
        }
    }

Ошибка возникает в строке db.SaveChanges.

Поскольку пользователь MemberShip сам является классом, а не частью структуры сущностей, кто-нибудь знает, как я могу установить UserID в качестве первичного ключа? Я проверил в базе данных, и она уже установлена, поэтому не знаю, как я могу изменить его в коде.

Спасибо - любая помощь оценена

Ответы [ 2 ]

4 голосов
/ 08 июня 2011

У вас есть две проблемы.

  1. Ваше отображение для MembershipUser не определяет ключ ни явно, ни явно.Вы не показываете код отображения, но об этом говорит ошибка.
  2. Вы не должны пытаться сопоставить MembershipUser в любом случае.

(2) является наиболее важным моментом здесь, поскольку он делает (1) своего рода неуместным. Вы никогда не должны зависеть от таблиц БД поставщика SQL .Также вы не должны использовать MembershipUser как сущность, поскольку вы не контролируете ее, и люди, которые поддерживают , поддерживают ее, не намерены использовать ее таким образом.

Получайте данные о членстве из API членства, а не с помощью прямого доступа к БД через EF.

3 голосов
/ 08 июня 2011

Если говорить о том, что говорит Крэйг, я знаю, что удобно сопоставлять таблицы членства, но в этом нет необходимости. Напишите свои запросы, чтобы принять поле идентификатора пользователя в качестве параметра, затем передайте его из Membership.GetUser (). ProviderUserKey.

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

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