2013-04-25 4 views
10

मैं एमवीसी के साथ-साथ इकाई ढांचे के लिए नया हूं। मैंने बहुत कुछ खोजा और कुछ समान प्रश्न ढूंढें (उदा। Entity Type Has No Key Defined) लेकिन वे मेरी समस्या का समाधान नहीं करते हैं।इकाई प्रकार की कोई कुंजी परिभाषित नहीं है - कोड पहले

namespace MvcAppInvoice.Models 
{ 
    public class Customer 
    { 
     public int CustomerID { get; set; } 
     public string FirstName { get; set; } 
     public string SurName { get; set; } 
     public virtual CustomerType Type { get; set; } 
    } 

    public class CustomerType 
    { 
     public int TypeId { get; set; } 
     public string TypeName { get; set; } 
     public virtual ICollection<Customer> customers { get; set; } 
    } 
} 

Add Controller

जब मैं नियंत्रक यह निम्न त्रुटि देता जोड़ने का प्रयास:

Error

उत्तर

14

आमतौर पर, पहले सम्मेलन द्वारा कोड implicitely सेट इकाई प्रकार के लिए महत्वपूर्ण है, तो संपत्ति के नाम पर है Id या TypeName+Id। आपके मामले में, TypeId उनमें से कोई भी है, तो आप यह कुंजी के रूप में स्पष्ट रूप में चिह्नित करना चाहिए, KeyAttribute या धाराप्रवाह वाक्य रचना के साथ का उपयोग कर, का उपयोग कर EntityTypeConfiguration.HasKey Method

+0

जैसा कि आपने सुझाव दिया है, मैंने संशोधित किया है, लेकिन यह भी एक ही त्रुटि देता है: कृपया – DevT

+1

में संपादन को देखें, जिसमें निश्चित त्रुटि होनी चाहिए।हो सकता है कि आपको इसे अपने कामों के पुनर्निर्माण के बाद – archil

+0

पर काम करने के लिए समाधान का पुनर्निर्माण करना चाहिए ... धन्यवाद ..... :) – DevT

1

मैं एक ही समस्या थी। मैंने अपने लिए काम करने वाले समाधान को ढूंढने से पहले 3 बार परियोजना को पुनरारंभ किया। मेरे पास एक सार्वजनिक वर्ग था जिसे मैंने मैन्युअल रूप से उपयोगकर्ताकॉन्टेक्स्ट कहा था। जब मैंने एडीओ कक्षा जोड़ने के लिए विज़ार्ड चलाया तो जादूगर ने UserContext का आंशिक वर्ग उत्पन्न किया। मैंने अपना उपयोगकर्ता कॉन्टेक्स्ट क्लास हटा दिया और मैंने उस वर्ग को संशोधित किया जो वीएस ने मेरे लिए जेनरेट किया था।

namespace UserLayer.Models 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public class UserContext : DbContext 
    { 

     public DbSet<UserDetail> UserDetails { get; set; } 
    } 
} 

अब यह संशोधन के बिना काम किया होगा। शायद कक्षा के मेरे संस्करण को हटाने से काम होगा। मुझे नहीं पता। जब मैंने नियंत्रक को जोड़ने की कोशिश की तो मुझे रेट्रॉक्ट में मैंने आपकी त्रुटि का सामना किया। मुझे संदेह है कि यह वीएस2012 में एक बग है क्योंकि एक आंशिक वर्ग और एक ही नाम का सार्वजनिक वर्ग मौजूद हो सकता है। उद्देश्य प्रोग्रामर को आंशिक वर्ग की परिभाषा को विस्तारित करने की अनुमति देना है।

1

नाम स्थान जोड़ें

using System.ComponentModel.DataAnnotations; 

अपने CustomerID के लिए महत्वपूर्ण विशेषता जोड़ें इस

[Key] 
public int CustomerID { get; set; } 

की तरह तो आवेदन का निर्माण और नियंत्रक को जोड़ने के लिए प्रयास करें। यह

0

इकाई कोड के लिए मेटाडेटा पुनर्प्राप्त करने में असमर्थ चयनित कोड जेनरेटर चलाने में कोई त्रुटि नहीं है, कोई कुंजी परिभाषित नहीं है।

  • एक और महत्वपूर्ण बात यह है एसक्यूएल तालिका केवल लेता है [ID] तो इकाई अगर आप की तरह [MenuId] यह अभ्यस्त अन्य प्राथमिक कुंजी का उपयोग ढांचे काम करेंगे।
  • आप क्योंकि के बाद [कुंजी] 1 द्वारा अपने वेतन वृद्धि जोड़ा है कि क्यों

मॉडल

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

तो मॉडल जो कुंजी है और स्तंभ क्रम

  • स्तंभ क्रम = 1 पर मान्यता जोड़ना चाहिए इकाई फ्रेम काम के तहत नियंत्रक बनाने के बाद इसे बनाएं

    मुझे उम्मीद है कि इससे मदद मिलती है।

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