इकाई फ्रेमवर्क में 6.1+ आप अपने मॉडल पर इस विशेषता का उपयोग कर सकते हैं:
[Index(IsUnique=true)]
आप इसे इस नामस्थान में पा सकते हैं:
using System.ComponentModel.DataAnnotations.Schema;
यदि आपका मॉडल फ़ील्ड एक स्ट्रिंग है, तो सुनिश्चित करें कि यह SQL सर्वर में nvarchar (MAX) पर सेट नहीं है या आपको एंटिटी फ्रेमवर्क कोड फर्स्ट के साथ यह त्रुटि दिखाई देगी:
तालिका 'dbo.y' में कॉलम 'x' एक प्रकार का है जो एक इंडेक्स में एक प्रमुख कॉलम के रूप में उपयोग के लिए अमान्य है।
इसका कारण यह है:
SQL सर्वर सभी अनुक्रमणिका कुंजी स्तंभों के अधिकतम कुल आकार के लिए 900-बाइट सीमा रखता है। "
(से: http://msdn.microsoft.com/en-us/library/ms191241.aspx )
आप अपने मॉडल पर अधिकतम स्ट्रिंग लंबाई सेट करके इसे हल कर सकते हैं:
[StringLength(450)]
आपका मॉडल अब EF CF 6.1+ में इस तरह दिखेगा:
public class User
{
public int UserId{get;set;}
[StringLength(450)]
[Index(IsUnique=true)]
public string UserName{get;set;}
}
अपडेट करें:
यदि आप धाराप्रवाह उपयोग करते हैं:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
// ....
Property(x => x.Name).IsRequired().HasMaxLength(450).HasColumnAnnotation("Index", new IndexAnnotation(new[] { new IndexAttribute("Index") { IsUnique = true } }));
}
}
और अपने मॉडल में उपयोग करें
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ...
modelBuilder.Configurations.Add(new UserMap());
// ...
}
अपडेट २
EntityFrameworkCore के लिए यह विषय भी देखें: https://github.com/aspnet/EntityFrameworkCore/issues/1698
अपडेट ३
EF6.2 के लिए देखें: https://github.com/aspnet/EntityFramework6/issues/274
अद्यतन ४
EF कोर के साथ ASP.NET Core Mvc 2.2:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Unique { get; set; }