Тип сущности UserGroupLink требует определения первичного ключа.Это отношение многих ко многим - PullRequest
0 голосов
/ 08 октября 2018

Я получаю Для типа объекта UserGroupLink требуется определить первичный ключ. Я получил эту ошибку, когда я запускаю Add-Migration в консоли диспетчера пакетов.Я пробовал разные ответы на stackoverflow, но ни один из них не работает для меня. Пользователь может быть частью любого числа Группы пользователей и Группа пользователей может иметь один или несколько Пользователь . UserGroupLink - это таблица, которая соединяет эту взаимосвязь, как показано ниже в конфигурации Fluent Api.Пожалуйста, помогите мне в этом.Я следовал этой статье https://github.com/aspnet/EntityFramework.Docs/blob/live/entity-framework/core/modeling/keys.md#fluent-api.

modelBuilder.Entity<UserGroup>().Property(u => u.UserGroupId).ValueGeneratedOnAdd();
        modelBuilder.Entity<UserGroup>().Property(u => u.Name).IsRequired().HasMaxLength(50);
        modelBuilder.Entity<UserGroup>().HasOne(u => u.Project).WithMany(p => p.UserGroups).HasForeignKey(f => f.ProjectId);

        modelBuilder.Entity<User>().HasKey(u => u.Email);
        modelBuilder.Entity<User>().Property(u => u.Name).IsRequired().HasMaxLength(50);
        modelBuilder.Entity<User>().Property(u => u.Email).IsRequired().HasMaxLength(50);
        modelBuilder.Entity<User>().Property(u => u.Role).IsRequired().HasMaxLength(50);

modelBuilder.Entity<UserGroupLink>().HasKey(l => new { l.UserGroupId, l.Email }); //Key is already defined here. Still error.
        modelBuilder.Entity<UserGroupLink>().HasOne(l => l.UserGroup).WithMany(u => u.UserGroupLinks).HasForeignKey(l => l.UserGroupId);
        modelBuilder.Entity<UserGroupLink>().HasOne(l => l.User).WithMany(u => u.UserGroupLinks).HasForeignKey(l => l.Email);

Класс

public class UserGroupLink
{
    public string Email { get; set; }
    public User User { get; set; }
    public int UserGroupId { get; set; }        
    public UserGroup UserGroup { get; set; }
    public UserGroupLink()
    {

    }
    public UserGroupLink(User user, UserGroup userGroup)
    {
        User = user;
        UserGroup = userGroup;
    }
}
public class UserGroup
{
    public int UserGroupId { get; set; }
    public string Name { get; set; }
    public int ProjectId { get; protected set; }
    public Project Project { get; protected set; }
    public IList<UserGroupLink> UserGroupLinks { get; set; }
}
public class User
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Role { get; set; }
    public IList<UserGroupLink> UserGroupLinks { get; set; }
}
...