我有一个Team实体,它有一个GUID TeamId属性,我想在将其保存到数据库时自动生成“添加”值(请注意,属性不是主键)。
我使用 EFCore 3.1.6 & 后端是 SqlServer。
根据 MS 文档,Add 上的值生成取决于数据库提供程序,并且应该为 sql server 自动生成 - https://learn.microsoft.com/en-us/ef/core/modeling/ generated-properties?tabs=数据注释#value- generated-on-add。现在,当我保存新团队时,它会失败,因为 TeamId 不是自动生成的,但它是数据库中的非空字段。
问题: EFCore 迁移不应该仅通过从注释中推断出该 TeamId 字段来设置默认值吗?或者我需要HasDefaultValueSql("NewId()")在OnModelCreating这个字段中使用?
如果这HasDefaultValueSql("NewId()")是缺失的部分,那么注释的意义何在?
public class Team
{
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public Guid TeamId { get; set; }
[Required]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
efcore数据库迁移创建的表:
CREATE TABLE [dbo].[Teams](
[Id] [INT] IDENTITY(1,1) NOT NULL,
[TeamId] [UNIQUEIDENTIFIER] NOT NULL,
[Name] …Run Code Online (Sandbox Code Playgroud) c# database-migration entity-framework-core .net-core ef-core-3.1