0

Я разрабатываю ASP.NET в C# после выполнения aspnet_regsql в моей базе данных. Я хочу отслеживать объекты игры и сопоставлять их пользователям ... если возможно, мне бы хотелось, чтобы у пользователя был список Игр, но, очевидно, я не могу использовать это в текущей реализации членства, если я не напишу свой собственный, который я пытаясь избежать.ASP.NET MVC Членство картографирование

public List<Game> Games { get; set; } 

В MVC, однако, как я на самом деле сопоставить это в другой модели (которая будет использовать ту же базу данных, будет просто еще одна таблица в этой базе данных).

public class Games 
{ 
    [key] 
    public int GameId 

    Properties/Details about the game here.... 

    //Foreign key to map to the specific user this Game belongs to 
    [Required] 
    public int UserId 
} 

Будет ли это работать? Подходит ли MVC в фоновом режиме, чтобы UserId был aspnet_User.UserId? Мне бы очень хотелось создать расширение интерфейса MembershipProvider, но если выше это не работает, я полагаю, мне, возможно, придется!

Кроме того, я не заинтересован в использовании профилей; как вы можете видеть, данные, которые я пытаюсь сопоставить, будут центральными в этом приложении. Попытка проанализировать данные профиля практически невозможна, когда ей также необходимо сопоставить другие объекты!

+0

только для уточнения, вы используете Entity Framework, не так ли? –

ответ

0

Если вам необходимо присоединиться к Game с aspnet_User, тогда ваша настройка не будет работать. Для этого вам нужно было бы сопоставить aspnet_User как сущность.

С другой стороны, если вам нужно только получить Игры для определенного пользователя, тогда ваша модель будет работать. Убедитесь, что вы вручную создаете FK, чтобы сохранить целостность данных.

Редактировать

Вы можете отобразить aspnet_User таблицу как объект следующим образом

[Table("aspnet_User")] 
public class User 
{ 
    public int UserId { get; set; } 
    // other props 
} 
+0

Спасибо! Таким образом, MVC по существу сопоставляет «UserId» с соответствующим «aspnet_User», который использует «Членство». Секретный соус за MVC меня пугает в несколько раз: \ –

+1

@AndrewHarris Я думаю, что вы говорите, это Entity Framework, а не MVC – Eranga

+0

А, хорошо! Просто вернусь к развитию, и у Msft есть много вещей, делающих магические вещи. Мне нужно освежить EF для достижения эффекта.Как бы то ни было, я не вижу, как EF будет знать, что я хочу, чтобы я сопоставлял UserId с именем aspnet_User.UserId. –

0

Когда вы добавляете новую игру, просто получить идентификатор текущего пользователя, который является справ (не INT как и выше, вы хотите, чтобы руководство было немного более безопасным и менее легко угадаемым, если оно когда-либо хранится на форме и позволяет пользователю вводить в него новые значения) Эта часть

Membership.GetUser().ProviderUserKey 

Для запроса это было бы просто

ctx.Games.Where(o=>o.UserId=Membership.GetUser().ProviderUserKey) 

Если вы хотите связи есть, хотя, считает @ relationship.If Eranga, который нужно рассмотреть каскад удаления (как в удалении пользователя, все игры идут до свидания), то см. раздел по адресу: http://msdn.microsoft.com/en-us/library/bb738695.aspx

+0

Я не вижу, как GUID будет более безопасным? Не разрешать идентификатор пользователя в строке запроса или размещаться. Индексирование GUID намного более неэффективно, чем использование последовательности int. Я рекомендую только рекомендации, если требуется переносимость. – jgauffin

+0

@ jgauffin Int-идентификаторы пользователей являются последовательными и легко предсказуемыми. Вы полагаетесь на разработчика, чтобы не размещать этот идентификатор где-то, и его неизбежное это произойдет. Следовательно, UserIds в поставщике членства основаны на принципах. Говорить «не разрешать» означает, что вы полагаетесь на разработчика, не забывая этого делать, а не внедрять более безопасный шаблон. Также, учитывая, что MVC обеспечивает безмозглый рендеринг вида через Html.EditorFor, вам следует помнить, чтобы исключить пользователя из каждой модели или модели представления, которую вы показываете. Опять же, много «запоминания» для разработчика. –

+0

Гид также может быть легко найти. Просто найдите пользователей и наведите указатель мыши на ссылку на данные пользователя. – jgauffin

0

№ Ничего волшебного не происходит. Вы сами должны назначить правильный идентификатор UserId.

Как EF или MVC могут знать, что вы хотите использовать зарегистрированный идентификатор пользователя? Ничто не означает, что любое пустое свойство UserId должно быть текущим пользователем.

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