Отображение членства в ASP.NET MVC

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

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 интерфейс, но если вышеперечисленное не работает, я полагаю, мне придется!

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

3 ответа

Решение

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

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

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

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

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

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

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

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

Membership.GetUser().ProviderUserKey

Запросить это было бы просто

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

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

Другие вопросы по тегам