2016-03-25 25 views
1

VS2015'te geliştirdiğim uygulamanızda kod ilk yaklaşımla en son Entity Framework sürümünü kullanıyorum.Entity Framework 6.1.3: Benzersiz anahtar kısıtlamasını bir sütuna ayarlayın

Varlık kümelerinden birinde (Customer), EmailAddress numaralı sütunda benzersiz bir anahtar kısıtlaması ayarlamak istiyorum.

[Index("IX_EmailAddress", 1, IsUnique = true)] 

ama çalışmıyor:

Bunu denedim. Customer tablosunda, EmailAddress sütunu yalnızca benzersiz değerlere sahip olmalı, kopyalara izin vermelidir.

Lütfen bana yol göster.

Teşekkür ederiz. Aşağıdaki uzatma yöntemi kullanan

+0

: 1, İşaret kompozit neyse, bu uygulamadan sonra, sonuç göçün aşağıdaki ifadeyi görmeli? Değilse, siparişi Dizin beyanından hariç tutmayı deneyin. –

+0

Birden çok sütun dizini, bu sütunların birleşimini, dizinin her bir ayrı sütunu değil, benzersiz yapar –

cevap

2

şu şekildedir:

/// <summary> 
/// Method to add a unique constraint to a property of an entity. 
/// The unique constraint name is usually "UI_{classname}_{propertyname}". 
/// </summary> 
/// <param name="prop">The property for which a unique constraint is added</param> 
/// <param name="constraintName">The name of the constraint</param> 
/// <param name="constraintOrder"> 
///  Optional constraint order for multi column constraints. 
///  This can be used if <see cref="HasUniqueConstraint"/> is called for multiple properties to define the order of the columns. 
/// </param> 
public static void HasUniqueConstraint(this PrimitivePropertyConfiguration prop, string constraintName, int constraintOrder = 1) { 
    prop.HasColumnAnnotation(IndexAnnotation.AnnotationName, 
     new IndexAnnotation(new IndexAttribute(constraintName, constraintOrder) { 
      IsUnique = true 
     }) 
    ); 
} 

Ve ModelBuilder içinde diyoruz:

ModelBuilder.Entity<Customer>().Property(c => c.EmailAddress).HasUniqueConstraint("IX_EmailAddress"); 

Ama bu farklı form var niteliktir olmadığından emin değilim Kullanılmış. Sipariş kullanmak neden

Yeterince garip, ayrıca
CreateIndex("dbo.Customer", "EmailAddress ", unique: true, name: "IX_EmailAddress");