Хобрук: Ваш путь к мастерству в программировании

Entity Framework 7 не может создать миграцию, поскольку существует свойство навигации с тем же именем

Я пытаюсь создать свою первую миграцию с использованием Entity Framework 7 с первой разработкой кода, и я получаю следующую ошибку:

Свойство «Электронная почта» не может быть добавлено к типу сущности «UserDTO», поскольку свойство навигации с таким же именем уже существует в типе сущности «UserDTO».

Моя среда: 1) Visual Studio 2015 2) Entity Framework v7.0.0-rc1-final 3) Первая разработка кода 4) Использование свободного API, а не аннотаций данных

Я не могу понять, в чем основная причина проблемы, но у меня есть несколько идей. Предполагается, что мой класс RoleDTO использует свой адрес электронной почты в качестве своего PK, а также имеет коллекцию объектов RoleDTO в качестве свойства.

Ниже приведен единственный класс, который у меня сейчас наследуется от DbContext. Я прокомментировал другой объект, который должен попытаться уменьшить проблему.

class StorageContext : DbContext
{
    public DbSet<UserDTO> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("MySQLServerConnectionString")
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserDTO>().HasKey(entity => entity.Email);
        //modelBuilder.Entity<UserDTO>().HasMany(entity => entity.Roles);
    }
}

А вот и класс UserDTO. Может ли кто-нибудь увидеть, что вызывает ошибку, когда я пытаюсь выполнить миграцию?

internal class UserDTO
{
    public EmailAddress Email { get; private set; }

    public string FullName { get; private set; }

    public string UserName { get; private set; }

    public virtual ICollection<string> Roles { get; private set; }

    // more below here like a constructor and some basic methods

Если я переключу ключ для UserDTO на простую строку вместо сложного объекта EmailAddress, похоже, что он обходит эту ошибку, и я получаю другую, не менее интересную:

Свойство «Роли» для типа объекта «Microsoft.SRE.NavisionOnline.ConfigurationAutomation.DAL.SQLEntities.UserDTO» не было добавлено в модель или проигнорировано.


  • У меня была такая же проблема с оператором HasIndex 30.03.2016

Ответы:


1

Насколько я знаю, вы не можете использовать сложный тип в качестве PK.

Для второго сообщения об ошибке: вы не можете использовать ICollection<string> Roles {..}, EF не сопоставит это свойство с таблицей, потому что вы используете «строку» в качестве типа.

Вам нужно определить класс Role и назначить ему ПК

public class Role
{
     public int Id {get; set;}
     public string RoleName {get; set;}
}

А затем в вашем UserDTO:

public ICollection<Role> Roles {...}
22.01.2016
  • У меня была такая же проблема с оператором HasIndex. Этот ответ дал мне решение 30.03.2016
  • Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..