pau*_*ode 5 c# sql-server entity-framework ef-fluent-api
我正在从 .NET EF 迁移到 EF CORE。我有一个可行的解决方案,可以自动生成除主键之外的唯一 GUID。下面是解决方案。
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Index(IsUnique = true)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试迁移到 EF Core 时,插入数据时收到错误消息: >SqlException: Cannot insert the value NULL into columns 'TenantId', table 'DBContext.dbo.Tenants'; 列不允许为空。插入失败。该语句已终止。
这是我的新代码:
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Guid TenantId { get; set; }
Run Code Online (Sandbox Code Playgroud)
流利:
base.OnModelCreating(builder);
builder.Entity<Tenant>()
.HasIndex(t => t.TenantId)
.IsUnique();
builder.Entity<Tenant>()
.Property(t => t.TenantId)
.ValueGeneratedOnAdd();
Run Code Online (Sandbox Code Playgroud)
这是通过使用以下方式插入的:
_context.Tenants.Add(tenant);
await _context.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
这是否是 EF Core 不支持的并且需要解决方法?
小智 1
在您的新代码上,您没有注释[DatabaseGenerated(DatabaseGeneratedOption.Identity)]。你的代码应该是:
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8404 次 |
| 最近记录: |