У меня есть такая настройка объекта:
public class Mission {
public int Id { get; set; }
...
public virtual ApplicationUser? Auditor { get; set; }
public string? AuditorId
}
В этой настройке каждая миссия может иметь 0 или 1 аудитора, и нас не волнует обратный путь (поиск миссий, связанных с аудитором).
Я хочу изменить это на это:
public class Mission {
public int Id { get; set; }
...
public ICollection<ApplicationUser> Auditor { get; set; }
}
Чтобы вместо этого в каждой Миссии было любое количество Аудиторов, и опять же, меня не волнует идти другим путем.
Но когда я редактирую сущность Mission следующим образом и создаю миграцию с помощью EF Core, миграция содержит следующее:
migrationBuilder.AddColumn<int>(
name: "mission_id",
table: "AspNetUsers",
type: "integer",
nullable: true);
Миграция добавляет столбец «mission_id» в таблицу AspNetUsers, но это не может быть правильным, поскольку каждый пользователь потенциально связан с несколькими миссиями, и в любом случае меня не волнует эта сторона отношений, поэтому я бы предпочел ее не иметь. .
Проблема в том, что я не знаю, как исправить миграцию или как создать правильную миграцию для моего варианта использования... (потому что есть также ModelSnapshot, который мне нужно будет изменить)
Я нашел этот раздел документации, который похож на то, что мне нужно: https://learn.microsoft.com/en-us/ef/core/modeling/relationships/many-to-many#unidirection-many-to-many.
Но он даже не компилируется? этот синтаксис public List<Tag> Tags { get; } = []; кажется неверным
На самом деле синтаксис был правильным (линтер Rider — нет), но сгенерированная миграция по-прежнему неверна!
Моя целевая платформа — net8.0, а для EntityFrameworkCore установлено значение 8.0.3.
Вам нужен C# версии 12 или выше (это сообщение об ошибке, которое я получаю, например, в dotnetfiddle при использовании .NET framework 4). Если вы используете .NET 8.0, вы сможете изменить версию языка C# в настройках проекта или решения.
public List<Tag> Tags { get; } = []; — это C# 12. Он должен работать в .NET 8.
ааа, очень сбивает с толку, Райдер неправильно сказал мне, что это неправильно, но на самом деле оно скомпилировалось
Затем вам следует проверить, нуждается ли ваш Rider в обновлении: blog.jetbrains.com/dotnet/2023/12/07/rider-2023-3-release
Я обновляю его прямо сейчас, но моя первоначальная проблема, к сожалению, осталась :( но спасибо за вашу помощь





Мне не хватало другой части, показанной в документации:
builder.Entity<Mission>().HasMany(m => m.Auditors).WithMany();
добавление этого в OnModelCreating() и повторное создание миграции сработало!
Что касается вашего последнего редактирования и проблемы с компиляцией, какую версию .NET/языковую версию C# вы используете?