11

我在我的项目中使用代码优先 EF,并在插入具有自定义 ID 的数据时遇到问题。

当我尝试使用自定义 ID(例如 999)插入数据时,EF 会忽略它并将递增的 ID 插入表中。

我的模型:

public class Address
{
        [Key]
        public int Id { get; set; }
        public string FirstName { get; set; }
...
}

如何解决这个问题?

编辑:

1) 如何从 N 开始递增,而不是从 0 开始?

2)如果我没有指定自定义 ID,DB 必须增加并插入自己的。如果我指定自定义 ID,DB 必须插入它。可能吗?

4

3 回答 3

20

您可以使用以下属性

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

在你的班级的钥匙上或使用 fluentAPI

modelBuilder.Entity<Address>().Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
于 2012-10-04T13:30:32.983 回答
1

EF Core中,您可以使用:

builder.Property(x => x.Id).ValueGeneratedNever();

或者

[DatabaseGenerated(DatabaseGeneratedOption.None)]
于 2020-03-05T10:47:48.557 回答
0

它实际上是OnModelCreatingDbContext课堂上。您可以设置序列号。通过在“请参阅此处”中添加以下内容,从您开始和递增DbContext class ,例如:https ://ef.readthedocs.io/en/staging/modeling/relational/sequences.html

  class MyContext : DbContext
    {
        public DbSet<Order> Orders { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
                .StartsAt(1000)
                .IncrementsBy(5);

            //Once a sequence is introduced, you can use it to generate values for properties in your model. For example, you can use Default Values to insert the next value from the sequence.
            modelBuilder.Entity<Order>()
                .Property(o => o.OrderNo)
                .HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers");
        }
    }
于 2016-10-26T20:58:01.423 回答