4

次のような EF 移行を使用してテーブルを作成しています。

this.CreateTable("Message",
            c => new
            {
                Id = c.Long(nullable: false, identity: true, defaultValue: 0),
                Subject = c.String(nullable: false, maxLength: 64),
                Body = c.String(nullable: false, isMaxLength: true)
            })
            .PrimaryKey(c => c.Id)
            .Index(c => c.Id, unique: true);

Id フィールドを auto_increment に定義するにはどうすればよいですか? 私はそれが可能でなければならないと確信していますが、私は見つけるのに苦労しています...

ありがとう。

4

2 に答える 2

3

フィールドに「identity: true」プロパティを設定するだけで十分なようですが、何らかの理由でフィールドが IDENTITY(1, 1) として定義されていません。

この投稿で回避策を見つけました:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/33db16ac-e166-455f-a47b-1e5fe0557979/

そして、それは私にとって次のように機能しました:

Id = new ColumnModel(PrimitiveTypeKind.Int64) { IsNullable = false, IsIdentity = true },

列を IDENTITY(1, 1) として定義するようになりました

于 2012-12-26T12:09:28.487 に答える
1

コードで自動的に生成したい場合は、Id フィールドの注釈をスキップして、以下のようにすることができます。

public abstract class AbstractContext : DbContext {

      /// <summary>
      /// Custom processing when saving entities in changetracker
      /// </summary>
      /// <returns></returns>
      public override int SaveChanges()
      {
          // recommended to explicitly set New Guid for appropriate entities
          foreach (var entry in ChangeTracker.Entries<ModelBase>().Where(e => e.State == EntityState.Added) ) {

              // only generate if property isn't identity...
              Type t = entry.Entity.GetType();
              var info = t.GetProperty("Id").GetCustomAttributes(
                  typeof(DatabaseGeneratedAttribute), true).Cast<DatabaseGeneratedAttribute>().Single();

              if (info.DatabaseGeneratedOption != DatabaseGeneratedOption.Identity) {
                  entry.Entity.Id = Guid.NewGuid(); // now we make it
              }
          }
          return base.SaveChanges();
      }

    }

詳細については、エンティティ キーの操作を確認してください。

コメントの上に示したリンクからこれを取得しました。

これがお役に立てば幸いです。

于 2012-12-26T07:05:12.147 に答える