.NET EFからEF COREに移行しています。私は主キーとは別のGUIDを自動的に生成する実用的なソリューションを持っています。以下はその解決策です。EFコア - プライマリキーではない一意の索引付き自動生成GUID列
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Index(IsUnique = true)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; }
私はEFコアに移行しようとしたときにデータを挿入するときしかし、私はエラーメッセージを取得しています:> SqlExceptionが:列' TenantId 'にNULL値を挿入することはできません、テーブル' DBContext.dbo.Tenants ';列はNULLを許可しません。 INSERTは失敗します。 ステートメントが終了しました。
は、ここに私の新しいコードです:
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Guid TenantId { get; set; }
流暢:
base.OnModelCreating(builder);
builder.Entity<Tenant>()
.HasIndex(t => t.TenantId)
.IsUnique();
builder.Entity<Tenant>()
.Property(t => t.TenantId)
.ValueGeneratedOnAdd();
これは、使用して挿入されます。
_context.Tenants.Add(tenant);
await _context.SaveChangesAsync();
はEFコアによってサポートされており、必要とされていません。このものです回避策?
生成される一意のGUIDはどのように生成されますか?あなたの設定では、EFCはそれがデータベース(列 'DEFAULT 'など)で提供されることを期待しています。 –
.NET Frameworkのバージョンでは、データベースによって自動的に生成されます。この 'ValueGeneratedOnAdd()'は生成しませんか? –
代わりに 'HasDefaultValueSql(" NEWID() ")'が必要だと思います。 –