Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एंटिटी के साथ बिना प्राथमिक कुंजी वाले दृश्य का उपयोग करना

<ब्लॉकक्वॉट>

क्या अद्वितीय पहचानकर्ता के बिना इकाई मॉडल में दृश्य जोड़ना संभव है?

यदि प्राथमिक कुंजी के बिना, नहीं। इसके परिणामस्वरूप इस प्रकार की त्रुटि होगी:

<ब्लॉकक्वॉट>

मॉडल निर्माण के दौरान एक या अधिक सत्यापन त्रुटियों का पता चला:

System.Data.Edm.EdmEntityType::EntityType 'SalesOnEachCountry' में कोई कुंजी परिभाषित नहीं है। इस EntityType.System.Data.Edm.EdmEntitySet के लिए कुंजी को परिभाषित करें:EntityType:EntitySetSalesOnEachCountryList SalesOnEachCountry प्रकार पर आधारित है जिसमें नोकी परिभाषित है।

यदि एक विशिष्ट पहचानकर्ता के बिना, हाँ, भले ही इसका एक गैर-वांछनीय आउटपुट हो। समान पहचानकर्ता वाले रिकॉर्ड एक ही वस्तु को संदर्भित करेंगे, इसे पहचान मानचित्र पैटर्न कहा जाता है

एक उदाहरण, भले ही आपका विचार इन दो पंक्तियों को उत्पन्न करता हो:

Country     Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000

यदि आप केवल देश फ़ील्ड पर प्राथमिक कुंजी को मैप करेंगे, उदा।

public class SalesOnEachCountry
{        
    [Key]
    public int CountryId { get; set; }
    public string CountryName { get; set; }        
    public int OrYear { get; set; }
    public long SalesCount { get; set; }
    public decimal TotalSales { get; set; }
}

, यहां तक ​​कि आपका विचार आपके Oracle क्वेरी संपादक पर उपरोक्त दो पंक्तियों को उत्पन्न करता है, Entity Framework इस गलत आउटपुट को उत्पन्न करता है:

Country     Year TotalSales
Philippines 2010 20.000000
Philippines 2010 20.000000

इकाई फ्रेमवर्क यह लेगा कि दूसरी पंक्ति पहली पंक्ति के समान वस्तु है।

विशिष्टता की गारंटी के लिए, आपको यह पहचानना होगा कि कौन से कॉलम प्रत्येक पंक्ति को अद्वितीय बनाते हैं। उपरोक्त उदाहरण में, वर्ष शामिल किया जाना चाहिए ताकि प्राथमिक कुंजी अद्वितीय हो। यानी

public class SalesOnEachCountry
{        
    [Key, Column(Order=0)] public int CountryId { get; set; }
    public string CountryName { get; set; }
    [Key, Column(Order=1)] public int OrYear { get; set; }

    public long SalesCount { get; set; }      
    public decimal TotalSales { get; set; }
}

अपनी प्राथमिक कुंजी को उपरोक्त विशेषताओं के समान बनाते हुए, एंटिटी फ्रेमवर्क आपके प्रत्येक दृश्य की पंक्ति को अपनी वस्तुओं पर सही ढंग से मैप कर सकता है। इसलिए, एंटिटी फ्रेमवर्क अब ठीक वही पंक्तियां प्रदर्शित कर सकता है जो आपके विचार में हैं।

Country     Year TotalSales
Philippines 2010 20.000000
Philippines 2011 40.000000

यहां पूर्ण विवरण:http://www.ienablemuch.com/2011/06/mapping-class-to-database-view-with.html

फिर आपके विचारों के संबंध में जिसमें पंक्ति को अद्वितीय बनाने के लिए कोई कॉलम नहीं है, एंटिटी फ्रेमवर्क की गारंटी देने का सबसे आसान तरीका आपके प्रत्येक दृश्य की पंक्ति को अपनी वस्तुओं पर मैप कर सकता है, आपके दृश्य के लिए एक अलग कॉलम बनाना है प्राथमिक कुंजी , एक अच्छा उम्मीदवार प्रत्येक पंक्ति पर केवल एक पंक्ति संख्या स्तंभ बनाना है। उदा.

create view RowNumberedView as

select 
    row_number() over(order by <columns of your view sorting>) as RN
    , *
from your_existing_view

फिर [Key] असाइन करें आपके class RowNumberedView . की RN संपत्ति पर विशेषता



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में नंबर कैसे फ़ॉर्मेट करें

  2. एनएलएस पैरामीटर और उनकी प्राथमिकताएं निर्धारित करने के तरीके (ओरेकल डेटाबेस)

  3. ओरेकल में एटीएएन () फ़ंक्शन

  4. जावा में इनपुटस्ट्रीम के लिए ओरेकल डेटाबेस बीएलओबी?

  5. हाइबरनेट> सीएलओबी> ओरेकल :(