11

プロジェクトでコードファーストEFを使用していますが、カスタムIDのデータが挿入されるときに問題が発生します。

カスタムID(999など)のデータを挿入しようとすると、EFはそれを無視し、インクリメントされたIDをテーブルに挿入します。

私のモデル:

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

この問題を解決する方法は?

編集:

1)0からではなく、Nからインクリメントを開始するにはどうすればよいですか?

2)カスタムIDを指定しない場合、DBはインクリメントして独自のIDを挿入する必要があります。カスタム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クラスにあります。シーケンス番号を設定できます。開始してincrementByを開始するには、次を追加して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 に答える