2012-12-13 13 views
34

के लिए कुंजी को परिभाषित करें मूल एएसपीनेट एमवीसी 4 अनुप्रयोग का विकास करना। यह एक साधारण उत्पाद कैटलॉग एप्लिकेशन है, जहां मेरे पास 2 डेटाबेस टेबल ('श्रेणी' और 'उत्पाद')EntityType 'श्रेणी' में कोई कुंजी परिभाषित नहीं है। इस EntityType

'उत्पाद आईडी' (श्रेणी तालिका में प्राथमिक कुंजी) का एक विदेशी कुंजी संदर्भ 'उत्पाद' तालिका में है ।

जब मैं एप्लिकेशन चलाता हूं, तो मुझे त्रुटि संदेश मिल रहा है (नीचे सूचीबद्ध)।

System.Data.Entity.Edm.EdmEntityType: : EntityType 'Category' has no key defined. Define the key for this EntityType. 

System.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'Category' is based on type 'Category' that has no keys defined 

यह नवागंतुकों के लिए एक सामान्य त्रुटि की तरह लग रहा है, मैं 'इकाई की कुंजी' के लिए सभी संबंधित समाधान की जाँच की थी 'कोई कुंजी परिभाषित नहीं है।' लेकिन फिर भी मेरी समस्या हल नहीं हुई है, कृपया इस समस्या को समझने में मेरी मदद करें और इस समस्या का सही समाधान क्या है।

नीचे अपने मॉडल वर्ग हैं

Category.cs

namespace ChemicalStore.Models 
{ 
    public partial class Category 
    { 
     public int CatId { get; set; } 
     public string CatName { get; set; } 
     public string CatDescription { get; set; } 
     public List<Product> Product { get; set; } 
    }  
} 

Products.cs

namespace ChemicalStore.Models 
{ 
    public class Product 
    { 
     public int ProductId { get; set; } 
     public int CatId { get; set; } 
     public string ProductTitle { get; set; } 
     public string ProductPrice { get; set; } 
     public string ProductDescription { get; set; } 
     public string ProductPackage { get; set; } 
    } 
} 
+0

हम्म .. क्यों इस सवाल बाद में सवाल का डुप्लिकेट के रूप में चिह्नित किया जाता है? –

उत्तर

72

आप संपत्ति CatID से पहले विशेषता [Key] जोड़ना चाहिए:

 using System.ComponentModel.DataAnnotations; 

     public partial class Category 
     { 
      [Key] 
      public int CatId { get; set; } 
      public string CatName { get; set; } 
      public string CatDescription { get; set; } 
      public List<Product> Product { get; set; } 
     } 

समस्या यह है कि ईएफ केवल तभी काम कर सकता है जब यह तालिका की प्राथमिक कुंजी को जानता हो। डिफ़ॉल्ट रूप से ईएफ नाम आईडी के साथ प्राथमिक कुंजी संपत्ति के रूप में पहचानते हैं। यदि आपकी तालिका में एक और प्राथमिक कुंजी है, तो आप इसे विशेषता [कुंजी] के साथ चिह्नित कर सकते हैं या धाराप्रवाह कॉन्फ़िगरेशन के साथ कुंजी सेट कर सकते हैं।

+2

पूरी तरह से सहमत हुए। सम्मेलन द्वारा एमवीसी "श्रेणी आईडी" नामक एक संपत्ति की अपेक्षा करेगा, लेकिन इसके बजाय आप "CatId" डाल दें, इसलिए आपको डेटा एनोटेशन का उपयोग करने और "CatId" के लिए [कुंजी] डालने की आवश्यकता है ताकि एमवीसी को पता चल सके कि मॉडल श्रेणी के लिए आपकी प्राथमिक कुंजी है। – Nestor

+0

आपको बहुत धन्यवाद, मैं एक नौसिखिया हूं और इससे मुझे और निराशा से बचाया गया। – Apollo

+0

मुझे एक ही त्रुटि है। लेकिन मैं सत्यापित करता हूं कि मैं सम्मेलन का सम्मान करता हूं मेरी संपत्ति 'सार्वजनिक int AccountRoleId' है क्या आप अन्य विचार हैं? – Kael

12

इकाई फ्रेमवर्क जेनरेट की गई तालिका पर प्राथमिक कुंजी कॉलम बनाने के लिए प्राथमिक कुंजी फ़ील्ड का उपयोग करता है।

यह कुछ बदलाव के साथ इस स्तंभ प्राप्त करने के लिए सम्मेलन का उपयोग करता है:

  • क्षेत्र id या किसी आवरण विचरण कहा जाता है;
  • यदि क्षेत्र को किसी भी आवरण भिन्नता के ClassNameId कहा जाता है;

मुझे कुछ और सम्मेलन याद आ रहे हैं, लेकिन ये सबसे आम मामले हैं।

आप इस सम्मेलनों आप की जरूरत विशेषता [Key] साथ अपने वांछित प्राथमिक कुंजी को चिह्नित करने के साथ किसी भी क्षेत्र नहीं है, तो:

[Key] 
public int CatId { get; set; } 
7

बस जगह [कुंजी] उपरोक्त आईडी पर विशेषता ..

[Table("employee")] 

public class Employee 
{ 

    [Key] 

    public int Empno { set; get; } 

    public string Empname { set; get; }  
} 
0

इकाई वर्गों .. ऑटो उत्पन्न कर रहे हैं

अगर उन फ़ाइलों में मैन्युअल परिवर्तन ओवरराइट किया जाएगा कोड पुनर्जन्म है।

यदि आप त्रुटि नीचे हो रही है के बारे में अधिक MSDN

+2

ओपी कोड-प्रथम दृष्टिकोण का उपयोग कर प्रतीत होता है। तो यह जवाब लागू नहीं होता है। – FrankO

0

हाय अपने सभी मेटाडाटा

[MetadataType(typeof(Category.CategoryMetadata))] 
    public partial class Category 
    { 
     internal sealed class CategoryMetadata 
     { 
      [Key] 
      public int CatId { get; set; } 
      [Required] 
      public string CatName { get; set; } 
      public string CatDescription { get; set; } 
      public List<Product> Product { get; set; } 
     } 
    } 

पढ़ें के साथ एक आंशिक वर्ग बनाना होगा। "" मॉडल उत्पादन के दौरान एक या अधिक सत्यापन त्रुटियों का पता चला:

चेकिंग। मॉडल। कर्मचारी:: EntityType 'कर्मचारी' की कोई कुंजी परिभाषित नहीं है। इस EntityType के लिए कुंजी को परिभाषित करें। "" बस अपने टेबल कॉलम नाम और परिभाषित संपत्ति का नाम समान या नहीं देखें। यदि नहीं तो इसे हल करने में समस्या ठीक करें।

0

मेरे मामले में मैंने सही कनेक्शन जोड़ने में इस समस्या को ठीक किया है web.config/app.config फ़ाइल में स्ट्रिंग।

मैं इसे जोड़ना भूल गया था और डीबीसीएन्टेक्स्ट डीबी के साथ संवाद करने में सक्षम नहीं था।

आशा है कि यह

7

मैं अपने कुंजी संपत्ति के लिए एक सेटर जोड़कर इस का समाधान करने में सक्षम था मदद करता है, मैं केवल पहले एक गेटर था।

public int Id { get; set; } 
+1

मैंने पाया कि गेटर/सेटर की कमी इस अपवाद को भी आग लग जाएगी। इसे "कुंजी" विशेषता के साथ रखें – LargeDachshund

+0

एक 'निजी सेट' पर्याप्त है –

संबंधित मुद्दे

 संबंधित मुद्दे