2013-02-13 2 views
2

Я использую EF5 VS2012 и используя SimpleMembership. Я позволил MS автоматически создавать SQL-таблицыEntity Framework не распознает webpage_UsersInRoles

WebSecurity.InitializeDatabaseConnection("SqlRoleManagerConnection", "webpages_Users", "UserID", "Username", true); 

И всякий раз, когда я пытаюсь создать модель из БД для создания EDMX, он опускает таблицу webpages_UsersInRoles. В этой таблице есть ссылки на эту таблицу, но она не отображается на диаграмме и для нее не создаются классы. Я запускаю VS2012 Update 1, поэтому это не связано с общими ошибками. Я также вручную выбрал Run Custom Tool, который не исправляет.

Как вы, наверное, знаете, эта недостающая таблица содержит только два поля FK для привязки таблиц «Пользователи и роли».

Я попытался создать новый проект и новые файлы EDMX, и все они производят одинаковый результат - отсутствуют диаграммы webpages_UsersInRoles & классов.

EDIT: Я могу повторить переход в «Обновление из БД» и выбрать таблицу, и она не добавится к диаграмме или классу. В чем причина такого поведения и как заставить EF подключить все, чтобы я мог использовать эту таблицу и класс?

enter image description here

+0

В чем вопрос? Вам нужна эта таблица на диаграмме? Будет ли обрабатывать что-либо прямо в этой таблице? Я предполагаю, что если его нет, когда вы создаете «EDMX», то это потому, что это не обязательно. –

+0

@LenielMacaferi Без этой таблицы вы не можете создавать отношения и без класса, я не могу ссылаться на него в коде. Я попытался добавить класс вручную, который бы имитировал то, что генерировал EDMX, он компилируется, но я все еще не могу получить к нему доступ в коде. Такое поведение довольно странно, и вы должны уметь воспроизводить данный пример выше. – SQLGrinder

+0

У меня такая же проблема, как и у вас, у вас есть исправление? –

ответ

2

Как правило, вы не ссылаться на эту таблицу непосредственно в коде. Вы работаете с API Membership.

Вот хороший пост, чтобы прочитать о нем: Seeding Membership & Roles in ASP.NET MVC 4

Пример кода:

private void SeedMembership() 
{ 
    if (!Roles.RoleExists("Administrator")) 
    { 
     Roles.CreateRole("Administrator"); 
    } 

    if (!Roles.RoleExists("Teacher")) 
    { 
     Roles.CreateRole("Teacher"); 
    } 

    if (!Roles.RoleExists("Student")) 
    { 
     Roles.CreateRole("Student"); 
    } 

    if (!WebSecurity.UserExists("leniel")) 
    { 
     WebSecurity.CreateUserAndAccount("leniel", "mypass"); 
    } 

    if (!Roles.GetRolesForUser("leniel").Contains("Administrator")) 
    { 
     Roles.AddUsersToRoles(new[] { "leniel" }, new[] { "Administrator" }); 
    } 

    if (!WebSecurity.UserExists("tester")) 
    { 
      WebSecurity.CreateUserAndAccount("tester", "test123"); 
    } 

    if (!Roles.GetRolesForUser("tester").Contains("Administrator")) 
    { 
     Roles.AddUsersToRoles(new[] { "tester" }, new[] { "Administrator" }); 
    } 
} 
+0

Хорошая статья для посева. Возможно, я просто ошибаюсь, но я не пользуюсь поставщиком членства. Я запускаю веб-приложение Intranet с использованием домена auth и пытаюсь написать код, чтобы иметь возможность управлять учетными записями домена и ролями, которым разрешено обращаться к частям сайта. – SQLGrinder

Смежные вопросы