Сначала работаем с кодом фреймворка сущности.
Попытка использовать идентификатор IdentityRole в качестве внешнего ключа для настраиваемого класса.
связь правильная, но когда я пытаюсь добавить данные в свою настраиваемую таблицу, я получаю эту ошибку.
EntityType 'IdentityUserRole' не имеет определенного ключа. Определите ключ для этого EntityType. IdentityUserRoles: EntityType: EntitySet «IdentityUserRoles» основан на типе «IdentityUserRole», для которого не определены ключи.
Код:
Пользовательский стол / класс
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; }
}
Привязки:
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 });
}
Связь в БД (правильная):
Пытался создать свойство id и установить атрибут [Key]
, но это не сработало:
public class ApplicationRole : IdentityRole
{
[Key]
public string Id { get; set; }
public virtual ICollection<UserRoleAccess> UserRoleAccess { get; set; }
}
Запустите этот код при добавлении данных:
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();
}
}
Что мне не хватает?
РЕДАКТИРОВАТЬ:
Класс IdentityRole: