Arbeiten mit Entity Framework-Code zuerst.EntityType '' IdentityUserRole 'hat keinen Schlüssel definierten Fehler
Der Versuch, die IdentityRole-ID als Fremdschlüssel für eine benutzerdefinierte Klasse zu verwenden.
Die Beziehung ist korrekt, aber wenn ich versuche, Daten zu meiner benutzerdefinierten Tabelle hinzuzufügen, erhalte ich diesen Fehler.
EntityType 'IdentityUserRole' hat keinen Schlüssel definiert. Definieren Sie den Schlüssel für diesen EntityType. IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' basiert auf Typ 'IdentityUserRole', die keine Schlüssel definiert hat.
Code:
Benutzerdefinierte Tabelle/Klasse
public class UserRoleAccess
{
[Key]
public long UserRoleAccessId { get; set; }
public string UserRoleId { get; set; }
public virtual ApplicationRole ApplicationRole { get; set; }
public bool IsActive { get; set; }
public string Name { get; set; }
public int UserRoleAccessType { get; set; }
}
IdentityRole:
public class ApplicationRole : IdentityRole
{
public virtual ICollection<UserRoleAccess> UserRoleAccess { get; set; }
}
Bindungen:
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<IdentityUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("Users").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("Roles");
modelBuilder.Entity<ApplicationRole>().ToTable("Roles");
modelBuilder.Entity<UserRoleAccess>().ToTable("UserRoleAccess");
modelBuilder.Entity<ApplicationUser>().HasRequired(p => p.Person)
.WithMany(b => b.Users);
modelBuilder.Entity<ApplicationUser>().HasRequired(p => p.Person)
.WithMany(b => b.Users)
.HasForeignKey(p => p.PersonId);
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<ApplicationRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
Beziehung in db (richtig):
versucht, auf eine ID-Eigenschaft Erstellen und eine [Key]
Attribut Einstellung, aber es hat nicht funktioniert:
public class ApplicationRole : IdentityRole
{
[Key]
public string Id { get; set; }
public virtual ICollection<UserRoleAccess> UserRoleAccess { get; set; }
}
Führen Sie diesen Code beim Hinzufügen Daten:
public static void CreateUserRoleAccess(string name, int type, string id)
{
using (var context = new UserRoleAccessContext())
{
var userRoleAccess = new UserRoleAccess();
userRoleAccess.ApplicationRole = new ApplicationRole { Id = id };
userRoleAccess.UserRoleId = id;
userRoleAccess.IsActive = true;
userRoleAccess.UserRoleAccessType = type;
userRoleAccess.Name = name;
context.UserRoleAccess.Add(userRoleAccess);
context.SaveChanges();
}
}
Was vermisse ich?
EDIT:
IdentityRole Klasse:
wir kein neues Schlüsselwort vor Objecttype verwenden, tun, tun wir? öffentliche neue Zeichenfolge Id {get; einstellen; } – Waleed
@Waled etwas Nachschärfer hinzugefügt. Wie hilft dein Kommentar? Mit oder ohne das neue Schlüsselwort vor der Eigenschaft Es funktioniert immer noch nicht – ThunD3eR
Können Sie die IdentityRole-Klasse buchen? Sie haben eine Zuordnung zum IdentityRole-Schlüssel in Ihrem Modell Builder – matthijsb