2013-03-14 13 views
5

İlk olarak kod için akıcı yapılandırma kullanarak bir sütunun benzersiz kısıtını zorlamaya çalışıyorum. iş mantığı bunu uygulamak veyaEF Kodu İlk Akıcı API benzersiz kısıtlamayı tanımlar

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

altında gibi bir şey kullanarak Ya da akıcı yapılandırmaları kullanarak benzersiz kısıtlamayla uygulamak mümkün değildir acaba daha iyi bir yolu var mı?

DÜZENLEME:

akıcı yapılandırmaları ile mümkün olmadığını teyit ediyor. Ama sonra tekrar bunu yapmanın en iyi yolu nedir merak ediyorum? EF'in bunu desteklememesinin nedenini bilmek isterim.

+1

Takım aşağıdakileri düşünüyor: http://entityframework.codeplex.com/workitem/299 – ErikEJ

cevap

1

Ben akıcı API kullanarak benzersiz kısıtlamayla uygulayamaz Bu sorun

önce meydana var. Bu yüzden

, kullandığınız yolu doğrudur!

+0

Cevabınız için teşekkür ederiz. Ama eğer bir komut kullanarak yaparsam, veritabanı uygulamamdan kaynaklanacak. Sahip olmak istemediğim bir şey. – Geethanga

2

Bu örnekte, Benzersiz anahtar özelliğinin nasıl tanımlanacağını ve herhangi bir Varlıkta nasıl kullanılacağını görebilirsiniz.

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

+1

Cevabınız için teşekkürler Imran. Aslında bunu yapmak için iyi bir yol. Ama sonunda ne yapar bir satıcıya özgü SQL deyimi yürütüyor, bu yüzden veritabanımı farklı bir satıcıya değiştirirsem, kodu değiştirmeyi bitireceğim. Ama aynı fikirdeyim, sadece bir yer değiştirmek zorundayım. – Geethanga

1

Bu DbMigrations ile mümkündür ...

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

Evet, ayrıca burada bulabileceğiniz bir blog yazısı da yazdım (http://goo.gl/Ks9HZI). Ama asıl sorum, Fluent API ile yapmanın bir yolu olsaydı. – Geethanga

+0

Özel kodları geçişlere sokma sorunu, geçişlerinizi temizlemeye/birleştirmeye/yeniden oluşturmaya karar verdiğinizde bu kodu kaybetme riskiniz olmasıdır. Tüm yapılandırmalarınızı "EntityTypeConfiguration" sınıflarında tutmanızı öneriyorum. Cevabımı nasıl kontrol ettiğimi kontrol et: http://stackoverflow.com/a/25779397/111438. – niaher

1

Bu özel bir uzantı yöntemi ile yapılabilir:

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); 
    } 
} 

burada tam cevabı kontrol : https://stackoverflow.com/a/25779348/111438

+0

Benzersiz bir anahtar oluşturan 2 sütun nasıl birlikte? –