6

खोजने में विफल रहा है मैंने मौजूदा डेटाबेस के आधार पर एक इकाई फ्रेमवर्क मॉडल बनाया है। एंटिटी फ्रेमवर्क ADO.NET DbContext जेनरेटर का उपयोग कर रहा है।एमवीसी 3/रेजर नियंत्रक जोड़ें "Get-PrimaryKey" प्राथमिक कुंजी

मैंने एक एमवीसी 3/रेजर प्रोजेक्ट भी बनाया है जो पहली परियोजना से डीएलएल का उपयोग कर रहा है। जब मैं विकल्प पर क्लिक करें "जोड़ें -> नियंत्रक" और आवश्यक फ़ील्ड मैं एक कष्टप्रद त्रुटि मिलती भरें:

Scaffolding GroupController... 
EMR_MasterEntities already has a member called 'Groups'. Skipping... 
Get-PrimaryKey : Cannot find primary key property for type 'CHS.CCC.DataModel.Group'. No properties appear to be primar 
y keys. 
At C:\Users\adriangilbert\Desktop\CHS.Monitor\packages\MvcScaffolding.1.0.6\tools\Controller\MvcScaffolding.Controller. 
ps1:74 char:29 
+ $primaryKey = Get-PrimaryKey <<<< $foundModelType.FullName -Project $Project -ErrorIfNotFound 
    + CategoryInfo   : NotSpecified: (:) [Get-PrimaryKey], Exception 
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.GetPrimaryKeyCmdlet 

इस के आसपास पाने के लिए, मैं Groups.cs कि दृश्य द्वारा उत्पन्न की गई करने के लिए जाने की जरूरत है स्टूडियो और 'System.ComponentModel.DataAnnotations का उपयोग करके' जोड़ें। और फिर समूह फ़ील्ड की घोषणा के लिए [कुंजी] जोड़ें। हालांकि यह जेनरेट कोड है। अगर मैं एंटिटी फ्रेमवर्क प्रोजेक्ट को पुन: संकलित करता हूं, तो मेरे बदलाव निश्चित रूप से खो जाएंगे।

तो - मेरे सवाल यह है:

Am मैंने कुछ गलत है कि खड़ी कर रहा है कर रही दृश्य स्टूडियो यह पता लगाने की क्या कुंजी क्षेत्र है, या यह सिर्फ मचान कोड है कि के साथ एक बग है में सक्षम नहीं हो कुंजी को समझने से इसे रोकना।

मुझे यह उल्लेख करना चाहिए कि यह केवल स्ट्रिंग-आधारित प्राथमिक कुंजी के साथ विफल रहता है। अगर क्षेत्र को इंटीजर के रूप में घोषित किया गया था, तो सब कुछ पूरी तरह से काम करता है।

CREATE TABLE [dbo].[Groups](
    [group_name] [varchar](45) NOT NULL, 
    [dbname] [varchar](45) NOT NULL, 
    [user] [varchar](45) NULL, 
    [CompatibilityVersion] [nvarchar](20) NULL, 
    ... 

PRIMARY KEY CLUSTERED ([group_name] ASC) 
) ON [PRIMARY] 

यहाँ मेरी पर्यावरण है::

यहाँ समस्याग्रस्त तालिका है

  • विजुअल स्टूडियो 2010
  • इकाई की रूपरेखा 4.1
  • MVC 3
  • एसक्यूएल सर्वर 2008 SP3 के साथ
  • +0

    आपने अपनी इकाई को कैसे निर्दिष्ट किया? – cpoDesign

    उत्तर

    1

    मेरा मानना ​​है कि एमवीसी मचान, एक सम्मेलन के रूप में, उम्मीद है कि प्राथमिक कुंजी एच संपत्ति के नाम पर "आईडी" के रूप में, लेकिन मुझे यकीन नहीं है।
    यदि संभव हो, तो आपके मामले में मैं तालिका के लिए प्राथमिक कुंजी के रूप में उपयोग करने के लिए surrogate key बनाउंगा, ताकि जब समूह_नाम को बदलने की आवश्यकता हो, तो मुझे उत्पन्न होने वाले मुद्दों को संभालना पड़ेगा।

    +0

    मैंने दो प्रकार की कोशिश की। MvcScaffolding ठंड डेटा प्रकार पर निर्भर है, न कि संपत्ति का नाम। एक सरोगेट कुंजी जोड़ना एक विकल्प नहीं है, मैं विरासत अनुप्रयोगों को प्रभावित किए बिना डेटाबेस स्कीमा को नहीं बदल सकता - वैसे भी, जिस कामकाज का मैंने उल्लेख किया है, वह मुझे इस मुद्दे से पीछे ले गया है, लेकिन मुझे अभी भी लगता है कि यह एमवीसीएसकॉल्डिंग में एक बग है। – Adrian

    +0

    चूंकि आप डेटाबेस स्कीमा नहीं बदल सकते हैं, इसलिए आप अपनी कक्षा में DataAnnotation [Key] जोड़ने के लिए T4 टेम्पलेट को बदल सकते हैं। इस तरह, जब आप अपना मॉडल अपडेट करते हैं तो आप इसे खो देंगे नहीं। –

    1

    डिफ़ॉल्ट रूप से ईएफ प्राथमिक के रूप में संपत्ति को मानता है, केवल अगर यह ID या {TableName}ID के प्रारूप में है ... आपके मामले में यह GroupNameId या आईडी होना चाहिए।

    दूसरा विकल्प Group_name by adding/decorating [Key] फ़ील्ड के ऊपर विशेषता है।