1
  1. Fluent API を使用しています。私は注釈が好きではありません。

  2. すべてのテーブルで、常に自動インクリメントを主キーとして使用するのが好きです。

  3. 私のテーブルのいくつかでは、X と Y (X は自動インクリメント キーではなく、Y は自動インクリメント キーではありません) の 2 つの列が一意である必要があります。 Y1=Y2。自動インクリメント キーを使用していない場合は、次のように単純にこれら 2 つをキーにします。

        modelBuilder.Entity<Foo>()
            .HasKey(t => new { t.X, t.Y })
            .ToTable("Foos");
    

    しかし、(2)で述べたように、自動インクリメントの主キーを使用しています

        modelBuilder.Entity<Foo>()
            .HasKey(t => t.someLongId)
            .ToTable("Foos");
    

Fluent API でこの複合的な一意性を実現するにはどうすればよいですか?

これは私が達成したいことであり、SQLで書かれています:

CREATE  TABLE `Foos` (
  `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT ,
  ...
  PRIMARY KEY (`ID`),
  UNIQUE KEY (`X`, `Y`) 
);
4

2 に答える 2

2

これは、「HasColumnAnnotation(...)」メソッドを使用して、IndexAnnotation > IndexAttribute を適用することで実現できます。

modelBuilder.Entity<Foo>() 
            .Property(t => t.X) 
            .HasColumnAnnotation("X", new IndexAnnotation(new IndexAttribute("X") { IsUnique = true }));

詳細については、こちら (MSDN)を参照してください。

于 2014-10-09T04:30:53.347 に答える