Я пишу простое приложение MVC6, использующее EF7 для передачи данных, и у меня возникают проблемы с настройкой пользователя и требований. В частности, у меня есть процедура посева базы данных, чтобы заполнить таблицы идентификации в базе данных конкретным пользователем (мной), у которого есть конкретные требования. Этот метод посева вызывается изнутри startup.cs.MVC6/EF7: Главный пользователь и заявки на размещение
Это довольно просто:
public static async Task CreateMasterUser(UserManager<ApplicationUser> userMgr, ILogger logger)
{
var user = await userMgr.FindByEmailAsync("my email");
if(user == null)
{
user = new ApplicationUser()
{
Email = "my email",
FirstName = "blah",
LastName = "blah",
UserName = "Blah",
};
IdentityResult result = await userMgr.CreateAsync(user, "mypw");
if(!result.Succeeded)
{
logger.LogCritical("Failed to create master user. Messages were: " + String.Join("; ", result.Errors.Select(x => x.Description)));
return;
}
}
await AddClaim(user, userMgr, "user.add", "allowed");
await AddClaim(user, userMgr, "user.delete", "allowed");
await AddClaim(user, userMgr, "user.edit.self", "allowed");
await AddClaim(user, userMgr, "user.edit.all", "allowed");
await AddClaim(user, userMgr, "user.confirm", "allowed");
await AddClaim(user, userMgr, "content.add", "allowed");
await AddClaim(user, userMgr, "content.view", "allowed");
await AddClaim(user, userMgr, "content.edit", "allowed");
await AddClaim(user, userMgr, "content.delete", "allowed");
}
private static async Task AddClaim(ApplicationUser user, UserManager<ApplicationUser> userMgr, string claim, string value)
{
if(user.Claims.SingleOrDefault(x => x.ClaimType == claim) == null)
await userMgr.AddClaimAsync(user, new Claim(claim, value));
}
Но есть проблема с претензиями раздела: каждый раз, когда сайт стартует новый набор требований добавляется для меня (то есть, дублируют требования создаются для того же пользователь).
Когда я просматриваю код, user.Claims никогда не имеет записей, даже если база данных (SQL-сервер) показывает записи в AspNetUserClaims для соответствующего пользователя.
Похоже, что коллекция Claims не заполняется из базы данных FindEmailAsync.
Как это сделать?
Thanx! У меня есть привычка полагаться на «автоматическую» ленивую загрузку в EF или включение операторов «include()» в свой код при построении запросов, поэтому я забыл, что записи дочерних таблиц, например, заявления, не включаются автоматически. –
Рад, что сработало для вас. – mcbowes