[英]Setting a column unique null without being an index in .NET EF Core
我想向表中添加一個字段,該字段應該是唯一的,但不是必需的(因此它可以為空)並且它不是索引。 這對 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
類,所以我只能使用相同的方法。
我以前遇到過這個問題。 使用 fluent API 無法做到這一點的原因很可能是(我在推測),因為有幾個數據庫不允許使用此功能,這是有道理的。 這篇文章解釋了原因:
如果您仍然想這樣做,只需像這樣在 OnModelCreating 上運行命令:
context.Database.ExecuteSqlCommand("ALTER TABLE table
DROP CONSTRAINT table_constraint"); //SQL Server / Oracle / MS Access
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.