इकाई फ्रेमवर्क कोड में पहले, कई कॉलम पर KeyAttribute का उपयोग कैसे करें


93

मैं पहले CTP5 इकाई फ्रेमवर्क कोड के साथ उपयोग करने के लिए एक POCO मॉडल बना रहा हूं। मैं पीके स्तंभ के लिए एक संपत्ति का नक्शा बनाने के लिए सजावट का उपयोग कर रहा हूं। लेकिन मैं एक कॉलम और फिर विशेष रूप से पीके को कैसे परिभाषित कर सकता हूं, मैं सूचकांक में स्तंभों के क्रम को कैसे नियंत्रित कर सकता हूं? क्या यह वर्ग में गुणों के क्रम का परिणाम है?

धन्यवाद!

जवाबों:


153

उदाहरण के लिए, आप कॉलम ऑर्डर को विशेषताओं में निर्दिष्ट कर सकते हैं:

public class MyEntity
{
    [Key, Column(Order=0)]
    public int MyFirstKeyProperty { get; set; }

    [Key, Column(Order=1)]
    public int MySecondKeyProperty { get; set; }

    [Key, Column(Order=2)]
    public string MyThirdKeyProperty { get; set; }

    // other properties
}

यदि आप Findएक विधि का उपयोग कर रहे हैं तो आपको DbSetइस आदेश को प्रमुख मापदंडों के लिए अवश्य लेना चाहिए।


1
InvalidOperationException: इकाई प्रकार 'XXX' में डेटा एनोटेशन के साथ मिश्रित प्राथमिक कुंजी है। समग्र प्राथमिक कुंजी सेट करने के लिए, धाराप्रवाह एपीआई का उपयोग करें।
लुका ज़िगलर

55

Salauma द्वारा प्रस्तुत सही उत्तर को पूरा करने के लिए, आप समग्र प्राथमिक कुंजियों के लिए एक आदेश निर्दिष्ट करने के लिए HasKey विधि का उपयोग कर सकते हैं :

public class User
{        
    public int UserId { get; set; }       
    public string Username { get; set; }        
}        

public class Ctp5Context : DbContext
{
    public DbSet<User> Users { get; set; }        

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().HasKey(u => new 
        { 
            u.UserId, 
            u.Username 
        });
    }
}

2
धन्यवाद - दोनों तरीके ठीक काम करते हैं। मैं गुण पसंद करता हूं क्योंकि मैं अपनी कक्षाओं को कोड से उत्पन्न कर रहा हूं, और विशेषताएँ अधिक संक्षिप्त हैं।
गिलशिल्ट

मैं व्यक्तिगत रूप से (प्रत्येक ... x) को भी जोड़ता हूं। क्या वह अच्छा, बुरा, उदासीन है?
Suamere

7

अगर, मेरी तरह, आप एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करना पसंद करते हैं जो आप इस तरह से कर सकते हैं (मानवी के उदाहरण के आधार पर):

public class User
{
    public int UserId { get; set; }
    public string Username { get; set; }
}  

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        ToTable("Users");
        HasKey(x => new {x.UserId, x.Username});
    }
}

जाहिर है आपको अपने संदर्भ में कॉन्फ़िगरेशन फ़ाइल को जोड़ना होगा:

public class Ctp5Context : DbContext
{
    public DbSet<User> Users { get; set; }        

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
         modelBuilder.Configurations.Add(new UserConfiguration());
    }
}

0

अनाम वस्तु के रूप में उपयोग करें:

modelBuilder.Entity<UserExamAttemptQuestion>().ToTable("Users").HasKey(o => new { o.UserId, o.Username }); 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.