我正在从.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; }
但是,当我尝试迁移到EF Core时,我在插入数据时收到错误消息:> SqlException:无法将值NULL插入列'TenantId',表'DBContext.dbo.Tenants';列不允许空值。 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 Core不支持的,需要解决方法吗?
答案 0 :(得分:1)
在新代码中,您没有[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
注释。你的代码应该是:
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; }
答案 1 :(得分:-3)
我认为您获得Null的原因是因为您应该实例化Guid的值。 像
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; } = Guid.NewGuid();