Добрый день, я столкнулся с проблемой создания отношений при изучении asp.core, сделал регистрацию и авторизацию на сайте через Identity и сделал классы:
public class User : IdentityUser
{
[Key]
public string Id { get; set; }
public IEnumerable<User> Pupils { get; set; }
public int SubLevel { get; set; }
public int Score { get; set; }
public virtual ICollection<ProxyUserGroup> ProxyUserGroups { get;set; } = new List<ProxyUserGroup>();
}
[Table("ProxyUserGroups")]
public class ProxyUserGroup
{
[Key]
[Column(Order = 0)]
public string UserId { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
[Key]
[Column(Order = 1)]
public int UserGroupId { get; set; }
[ForeignKey("UserGroupId")]
public virtual UserGroup UserGroup { get; set; }
}
[Table("UserGroups")]
public class UserGroup
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ProxyUserGroup> ProxyUserGroups { get; set; } = new List<ProxyUserGroup>();
}
Затем я выполнил миграциюв базу данных (до этого я сделал руками таблицы, но не смог преодолеть ошибку и решил выполнить миграцию)
Таблица ProxyUserGroup
create table ProxyUserGroups (
UserId nvarchar(450) not null
constraint FK_ProxyUserGroups_User_UserId
references AspNetUsers on delete cascade,
UserGroupId int not null
constraint FK_ProxyUserGroups_UserGroups_UserGroupId
references UserGroups on delete cascade,
constraint PK_ProxyUserGroups
primary key (UserId, UserGroupId),
constraint AK_ProxyUserGroups_UserGroupId_UserId
unique (UserGroupId, UserId) )
Таблица UserGroups
create table UserGroups (
Id int identity
constraint PK_UserGroups
primary key,
Name nvarchar(max) )
И контекст
protected override void OnModelCreating(Microsoft.EntityFrameworkCore.ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProxyUserGroup>()
.HasKey(t => new { t.UserId, t.UserGroupId });
modelBuilder.Entity<ProxyUserGroup>()
.HasOne<User>(e => e.User)
.WithMany(t => t.ProxyUserGroups)
.HasForeignKey(e => e.UserId);
modelBuilder.Entity<ProxyUserGroup>()
.HasOne<UserGroup>(e => e.UserGroup)
.WithMany(t => t.ProxyUserGroups)
.HasForeignKey(e => e.UserGroupId);
}
После запуска сайта отображается:
InvalidOperationException: тип сущности 'ProxyUserGroup' имеет составной ключ, определенный с аннотациями данных.Чтобы установить составной первичный ключ, используйте свободный API.
Но если вы переходите на сайт в режиме инкогнито, то все в порядке, пока вы не попытаетесь войти в систему, а затем выбросить его:
InvalidOperationException: Тип сущности 'ProxyUserGroup' имеет составной ключ, определенный с аннотациями данных.Чтобы установить составной первичный ключ, используйте свободный API.
User user = await userManager.FindByEmailAsync (model.Email); // error is still here
Из первой ошибки я понял, что в modelBuilder.Entity ().HasKey (t => new {t.UserId, t.UserGroupId});
первичный ключ не генерируется (составной из двух внешних ключей), ноу второго все еще проблема с IdentityUser
(чего раньше не было).Что именно не так и что нужно исправить?Заранее спасибо. (Простите за мой английский).