Элемент Entity Framework Core 3.1.6 с таким же ключом уже добавлен - PullRequest
0 голосов
/ 03 августа 2020

У меня есть веб-сайт MVC в NET Core 3.1 с использованием Entity Framework 3.1.6. Моя проблема в том, что одна из моих сущностей теперь выдает ошибку:

System.ArgumentException: элемент с таким же ключом уже был добавлен. Ключ: Assessor

До недавнего времени он работал нормально, и я не уверен, что изменилось.

Модель

public class FacilityQCResult
{
    [Key]
    public int ID { get; set; }
    public Guid? QCID { get; set; }
    public string QCSeverity { get; set; }
    public string QCType { get; set; }
    public string QCShortName { get; set; }
    public string Resolution { get; set; }
    public string Base { get; set; }
    public string FacilityNumber { get; set; }
    public string FacilityName { get; set; }
    public DateTime? DataEntryComplete { get; set; }
    public string TeamAssignment { get; set; }
    public string Assessor { get; set; }
    public string TripWeek { get; set; }
    public string Details { get; set; }
    public Guid? FacilityID { get; set; }
}

Контекст

public partial class SQLDBContext : DbContext
{
    public SQLDBContext()
    {
    }

    public SQLDBContext(DbContextOptions<SQLDBContext> options)
        : base(options)
    {
    }
    
    
    public virtual DbSet<FacilityQCResult> FacilityQCResults { get; set; }
    
 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<FacilityQCResult>(entity =>
        {
            entity.ToTable("FacilityQCResult");
            entity.HasKey(e => e.ID);

            entity.Property(e => e.DataEntryComplete)
                .HasColumnName("Data_Entry_Complete")
                .HasColumnType("datetime");

            entity.Property(e => e.TeamAssignment)
                .HasColumnName("Team_Assignment")
                .HasMaxLength(100)
                .IsUnicode(false);

            entity.Property(e => e.TripWeek)
                .HasColumnName("Trip_Week")
                .HasMaxLength(10)
                .IsUnicode(false);
        });
    }
}

Структура таблицы

введите описание изображения здесь

Выдает ошибку при переходе к следующей строке:

var result = await context.FacilityQCResults.FromSqlRaw(" exec [dbo].[pr_ExecuteFacilityQCRules]").ToListAsync();

Хранимая процедура выполняет некоторые другие действия и выводит строки данных, моделирующих структуру таблицы. Забавно то, что у меня есть еще один объект, который настроен аналогично и работает без проблем. До недавнего времени казалось, что это работало, но я не уверен, когда именно это началось и почему, поскольку я не менял структуру объекта или таблицы. По сути, EF Core считает, что столбец Assessor является ключевым, хотя я этого не уточнял. Как это происходит и как мне сказать, что это не ключ?

1 Ответ

1 голос
/ 03 августа 2020

Это не похоже на исключение SQL, связанное с сервером (т. Е. У меня создается впечатление, что вы думаете, что исключение выбрано из-за исключения повторяющегося ключа SQL, сродни тому, что вы бы увидели, если бы попробовали для создания нескольких строк с повторяющимся PK и / или уникальным ключом / ключом индекса). В этом случае вы бы увидели другое исключение (вероятно, SqlException или связанное с ним).

Это , скорее всего, a C# исключение, всплывающее откуда-то в EF или связанном с ним , и если бы мне пришлось сделать безумное предположение, я бы первым догадывался, что вы, возможно, получаете столбец «Assessor», возвращаемый несколько раз из набора результатов, возвращаемого хранимой процедурой pr_ExecuteFacilityQCRules. Однако это всего лишь догадка - простой тест - выполнить процедуру в клиенте SQL и увидеть возвращенные столбцы. Вы обычно видите этот тип исключения в C#, пытаясь добавить несколько повторяющихся имен ключей в словарь или аналогичный (например, myDictionary.Add (key)).

Если это не так, я думаю, что нужно добавить немного больше информации, чтобы помочь в диагностике помимо предположений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...