Как удалить уникальный индекс из Dotnet EF? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть модель:

Пользователь

public class User {
 public int Id { get; set; }
 public string UserName {get; set;}
 ...
 public int? ManagerId {get; set;}
 public User Manager {get; set;}
 public int? SupervisorId {get; set;}
 public User Supervisor {get; set;}
..
}

Я проверил свою базу данных MySQL и обнаружил, что ManagerId уникален. Я не сделал это уникальным. Теперь я хочу удалить это, используя dotnet ef migrations. Как это сделать?

В данный момент я использую ядро ​​donet 2.1.

У меня есть тест с удалением ManagerID и Manager и я делаю миграцию dotnet ef и добавляю UpdateUser

проверено и ManagerID удален. Затем я попытался снова добавить новое имя AssignedManagerID, и он создал новое с уникальным true.

migrationBuilder.CreateIndex(
                name: "IX_Users_AssignedManagerId",
                table: "Users",
                column: "AssignedManagerId",
                unique: true);

мой Datacontext: public DbSet Users {get; установить;}

У меня вообще нет языка в OnModelCreating () для пользователя

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

EF Core сбит с толку двумя самосвязанными навигационными свойствами User и ошибочно решает, что вы пытаетесь смоделировать взаимно-однозначные отношения между User.Manager и User.Supervisor.Он (случайным образом) выбирает Suprevisor в качестве принципала и создает уникальные отношения FK через ManagerId.SuprevisorId не рассматривается как FK, поэтому для него не создаются отношения FK.

Как обычно, когда предположения EF Core неверны, вы должны разрешить их явно с помощью аннотаций данных и / или свободного API.Для отношений со ссылками на себя единственным вариантом является свободный API, поэтому добавьте следующее к переопределению OnModelCreating, чтобы создать два отношения один-ко-многим:

modelBuilder.Entity<User>().HasOne(e => e.Manager).WithMany();
modelBuilder.Entity<User>().HasOne(e => e.Supervisor).WithMany();
0 голосов
/ 12 сентября 2018

Вы можете попробовать ниже код.

migrationBuilder.DropIndex(name:"IX_Users_AssignedManagerId",table:"Users");

Это работает в моем проекте. спасибо

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