将对象映射为实体框架核心中的标识列

Spl*_*san 10 c# entity-framework-core

是否可以将映射对象作为标识列,并生成值 typeof int ?我尝试过这样,但这没有帮助。我有错误

标识值生成不能用于实体类型“Article”上的属性“Id”,因为属性类型为“ArticleId”。标识值生成只能与有符号整数属性一起使用。

    public class ArticleId
    {
        public int Value { get; private set; }

        public ArticleId(int value)
        {
            Value = value;
        }
    }

    public class Article 
    {

        public ArticleId Id { get; set; }
        public string Name { get; set; }
    }
     
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        var converter = new ValueConverter<ArticleId, int>(
                                    v => v.Value,
                                    v => new ArticleId(v)
        );

       modelBuilder
       .Entity<Article>()
       .Property(p => p.Id)     
       .HasConversion(converter)
       .ValueGeneratedOnAdd()
       .UseIdentityColumn();

       base.OnModelCreating(modelBuilder);
    }
Run Code Online (Sandbox Code Playgroud)

Sae*_*ini 0

只需将此 Attribute 用于类Id中的属性即可Article

public class Article
{
    [Column(TypeName = "int IDENTITY(1,1)")]
    public ArticleId Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

迁移部分将是这样的:

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.CreateTable(
        name: "Articles",
        columns: table => new
        {
            Id = table.Column<int>(type: "int IDENTITY(1,1)", nullable: false),
            Name = table.Column<string>(type: "nvarchar(max)", nullable: true)
        },
        constraints: table =>
        {
            table.PrimaryKey("PK_Articles", x => x.Id);
        });
}
Run Code Online (Sandbox Code Playgroud)

而数据库中的表是这样的: 数据库