Отображение членства в 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