2013-03-14 13 views
5

コードの最初の流暢な構成を使用して列の一意制約を強制しようとしています。ビジネスロジックでそれを実装するか、EFコードFirst Fluent APIは一意制約を定義します

context.ObjectContext.ExecuteStoreCommand("CREATE UNIQUE CONSTRAINT..."); 

以下のようなものを使用するか、それは流暢な設定を使用してユニーク制約を実装することはできません場合、私は思っていたよりも良くなる方法はありますか?

編集:

これは流暢な構成では不可能であることが確認されています。しかし、もう一度私はこれを行うための最善の方法は何ですか?そして、これを支持していないEFの背後にある理由を知りたい。

+1

チームは検討中です:http://entityframework.codeplex.com/workitem/299 – ErikEJ

答えて

1

私はこの問題を持っているが、それは流暢なAPIを使用して独自の制約を実装することはできません

前に発生した。

ので、あなたは使用方法が適切です!

+0

返信ありがとうございます。しかし、私がコマンドを使ってそれを行うと、データベースの実装に依存することになります。それは私が持ちたくないものです。 – Geethanga

2

この例では、一意のキー属性を定義し、それをどのエンティティで使用するかを確認できます。

http://code.msdn.microsoft.com/windowsdesktop/CSASPNETUniqueConstraintInE-d357224a

+1

返信ありがとうございます。実際、それを行うには良い方法です。しかし最終的にベンダー固有のSQLステートメントを実行しているので、データベースを別のベンダーに変更する場合は、コードを変更することになります。しかし、私は1つの場所だけを修正する必要があることに同意する。 – Geethanga

1

これは...

public override void Up() 
{ 
    CreateIndex("dbo.MyTableName", "MyColumnName", unique: true); 
} 
+0

本当に、私はあなたがここでそれを見つけることができるというブログ投稿を書いています(http://goo.gl/Ks9HZI)。しかし、私の元々の質問は、Fluent APIを使ってそれを行う方法がある場合でした。 – Geethanga

+0

カスタムコードを移行に移行する際の問題は、移行をパージ/結合/再生成する際にコードを失う危険があることです。 'EntityTypeConfiguration'クラスにすべての設定を保存することをお勧めします。それについての私の答えをチェックしてください:http://stackoverflow.com/a/25779397/111438。 – niaher

1

それはカスタム拡張の方法で行うことができますDbMigrationsで可能です:

using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity.Infrastructure.Annotations; 
using System.Data.Entity.ModelConfiguration.Configuration; 

internal static class TypeConfigurationExtensions 
{ 
    public static PrimitivePropertyConfiguration HasUniqueIndexAnnotation(
     this PrimitivePropertyConfiguration property, 
     string indexName, 
     int columnOrder = 0) 
    { 
     var indexAttribute = new IndexAttribute(indexName, columnOrder) { IsUnique = true }; 
     var indexAnnotation = new IndexAnnotation(indexAttribute); 

     return property.HasColumnAnnotation("Index", indexAnnotation); 
    } 
} 

は、ここに完全な答えをチェック:https://stackoverflow.com/a/25779348/111438

+0

2つの列が一意のキーを形成するのはどうですか? –

関連する問題