Also versuche ich eine neue Rolle in meiner MVC5-Anwendung zu erstellen. Jedes Mal, wenn ich eine Ausnahme sagen erhalten:Name der Anwendungsrolle kann nicht null oder leer sein
Name cannot be null or empty
Modell:
public class ApplicationRole : IdentityRole
{
public new string Id { get; set; }
[Display(Name = "Name")]
public new string Name { get; set; }
[Display(Name = "Description")]
[StringLength(100, MinimumLength = 5)]
public string Description { get; set; }
}
Controller:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(ApplicationRole model)
{
try
{
if (ModelState.IsValid)
{
var role = new ApplicationRole()
{
Name = model.Name,
Description = model.Description
};
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>());
var result = await roleManager.CreateAsync(role);
if (result.Succeeded)
{
return RedirectToAction("Index", "Roles", model);
}
else
{
AddErrors(result);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
// If we got this far, something failed, redisplay form
return View(model);
}
Ausführung wird in der folgenden Zeile:
var result = await roleManager.CreateAsync(role);
Ausblick:
@model IEnumerable<User_Manager_Interface.Models.ApplicationRole>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.ActionLink("Create New", "Create", "Roles", new object { }, new { @class = "stdbtn" })
<div class="contenttitle radiusbottom0">
<h2 class="table"><span>Roles</span></h2>
</div>
<table cellpadding="0" cellspacing="0" border="0" class="stdtable" id="dyntable">
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</tbody>
</table>
Was ich nicht bekommen, ist diese Rolle die Felder, die ich in meiner Meinung nach passieren bekommt aber der Fehler bestehen bleibt. Irgendwelche Vorschläge, wie ich das umgehen kann? Hoffentlich habe ich genug zur Verfügung gestellt, um den Fehler zu reproduzieren.
UPDATE zu meinem Szenario:
IdentityRole hat seine eigene ID und die Namen Eigenschaften, und wenn ich sie im ApplicationRole Modell erklären und sie mit dem neuen Stichwort Dekoration wird es offensichtlich versteckt die geerbte Mitglied. Ich war mir dessen bewusst, als ich die Frage gepostet habe.
Wenn ich die beiden Eigenschaften völlig zu entfernen, dann löst die Anwendung eine Ausnahme zur Laufzeit beschrieben:
Mapping and metadata information could not be found for EntityType 'User_Manager_Interface.Models.ApplicationRole
zurück gehen 1. Punkt, der Grund, warum ich mit dieser Umsetzung ging über 2. ist, weil mit 1., die Anwendung nicht beendet, sondern wirft stattdessen einen Modellstatusfehler (wie im Titel der Frage beschrieben) über Name
Eigenschaft ist null.
Ich versuchte, den Stack-Trace, um weitere Informationen über die Ausnahme zu untersuchen, aber ich konnte nicht mehr Informationen als andere sammeln, was ich schon weiß:
e.StackTrace "
at System.Data.Entity.Core.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)\r\n
at System.Data.Entity.Core.Objects.ObjectContext.ValidateEntitySet(EntitySet entitySet, Type entityType)\r\n
at System.Data.Entity.Core.Objects.ObjectContext.VerifyRootForAdd(Boolean doAttach, String entitySetName, IEntityWrapper wrappedEntity, EntityEntry existingEntry, EntitySet& entitySet, Boolean& isNoOperation)\r\n
at System.Data.Entity.Core.Objects.ObjectContext.AddObject(String entitySetName, Object entity)\r\n
at System.Data.Entity.Internal.Linq.InternalSet1.<>c__DisplayClassd.<Add>b__c()\r\n
1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)\r\n
at System.Data.Entity.Internal.Linq.InternalSet
at System.Data.Entity.Internal.Linq.InternalSet1.Add(Object entity)\r\n
1.Add(TEntity entity)\r\n
at System.Data.Entity.DbSet
at Microsoft.AspNet.Identity.EntityFramework.RoleStore`3.d__2.MoveNext()\r\n---End of stack trace from previous location where exception was thrown ---\r\n
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n
at Microsoft.AspNet.Identity.RoleManager2.<CreateAsync>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n
1.GetResult()\r\n at User_Manager_Interface.Controllers.RolesController.d__5.MoveNext() in C:\Users\Linda\UserManager\FSKUserManager\FSK_UserManager_Web\Controllers\RolesController.cs:line 104"
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter
Warum verwenden Sie die [ 'new' Modifikator] (https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/new-modifier) für Ihre Eigenschaften? Es ist nicht was du denkst. –
@FedericoDipuma Überschreibt die Id- und Name-Eigenschaften, die von IdentityRole bereitgestellt werden. Wenn ich die beiden Eigenschaften alle zusammen entferne, beschwert es sich über das Fehlen von Mapping- und Metadaten-Informationen, und wenn ich sie dort habe, beschwert es sich darüber, dass Name null ist, obwohl ich an der Zeichenfolge vorbeigehe. –
Diese Ausnahme zeigt, dass Ihr 'DbContext' möglicherweise nicht korrekt konfiguriert ist. Ihr erstes Problem besteht darin, 'RoleManager' und 'RoleStore ' mit einem abgeleiteten Typ wie 'ApplicationRole' zu verwenden (der standardmäßig nicht zugeordnet ist). Ich kann nicht mehr sagen, ohne Ihre gesamte Identitätskonfiguration zu sehen. –