Добрый день, столкнулся с проблемой создания отношений при изучении 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 virtual ICollection<ProxyUserGroup> ProxyUserGroups { get; set; } = new List<ProxyUserGroup>();
public string Name { get; set; }
}
Потом сделал миграцию в БД (до этого делал руками таблицы но не смог побороть ошибку и решил сделать миграцию)
В таблице ProxyUserGroups: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: Entity type 'ProxyUserGroup' has composite primary key defined with data annotations. To set composite primary key, use fluent API.
Но если зайти на сайт в режиме инкогнито то все нормально пока не пытаешся залогиниться и тогда выбрасывает:
InvalidOperationException: Entity type 'ProxyUserGroup' has composite primary key defined with data annotations. To set composite primary key, use fluent API.
+ User user = await userManager.FindByEmailAsync(model.Email); //ошибка еще тут
Из первой ошибки я понял что в modelBuilder.Entity() .HasKey(t => new { t.UserId, t.UserGroupId }); несоздается первичный ключ (составной из двух внешних) а вот во второй еще проблема с IdentityUser возникает (которой раньше небыли). Что именно неправильно и что нужно поправить? Заранее спасибо.