Я хотел бы добавить в таблицу поле, которое должно быть уникальным, но не обязательным (поэтому оно может быть нулевым) и не является индексом. Это выполнимо с SQL, что-то вроде этого в mysql:
CREATE TABLE MyTable (
...
field VARCHAR(255) UNIQUE
...
)
Я попытался переопределить DbContext.OnModelCreating
и добавил:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// this creates an index, which I don't need/want for this field
modelBuilder.Entity<User>()
.HasIndex(x => x.Field)
.IsUnique();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// This creates a NOT NULL Constraint
modelBuilder.Entity<User>()
.HasAlternateKey(x => x.Field);
}
Код ниже выдает мне сообщение об ошибке: The property 'Field' on entity type 'User' cannot be marked as nullable/optional because it has been included in a key {'Field'}.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// This gives me an error
modelBuilder.Entity<User>()
.HasAlternateKey(x => x.Field);
modelBuilder.Entity<User>()
.Property(x => x.Field)
.IsRequired(false);
}
Если бы у меня был способ просто добавить SQL вручную, я был бы согласен с этим. Я не знаю, возможно ли это, если я отредактирую файл миграции вручную, но файлы migration.Design.cs
используют тот же класс ModelBuilder
, поэтому у меня есть только те же методы для работы.