Code-First Entity Framework使用自定义ID插入数据

时间:2012-10-04 13:20:03

标签: c# .net-4.0 entity-framework-4.1 code-first

我在项目中使用代码优先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。如果我指定自定义ID,则DB必须插入它。有可能吗?

3 个答案:

答案 0 :(得分:19)

您可以使用以下属性

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]

关于班级的关键或使用fluentAPI

modelBuilder.Entity<Address>().Property(p => p.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

答案 1 :(得分:1)

EF Core 中,您可以使用:

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

[DatabaseGenerated(DatabaseGeneratedOption.None)]

答案 2 :(得分:0)

它实际上在OnModelCreating课程的DbContext中。您可以设置序列号。通过在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");
        }
    }