我正在从。NET EF迁移到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 Core时,在插入数据时会收到一条错误消息:>SQLException:无法将值NULL插入到表'DBContext.DBO.Tenters'的列'TenantId'中;列不允许空值。插入失败。语句已终止。
这是我的新代码:
[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不支持的,需要解决的问题吗?
在新代码中,没有[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
注释。您的代码应该是:
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; }
我认为您得到Null的原因是因为您应该实例化GUID的值。类似于
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid TenantId { get; set; } = Guid.NewGuid();