6

Varolan bir veritabanına dayalı bir varlık çerçeve modeli oluşturdum. Varlık Çerçevesi, ADO.NET DbContext Generator kullanıyor.MVC3/Jilet Ekleme Denetleyicisi "Get-PrimaryKey" birincil anahtarını bulmakta başarısız oluyor

Ayrıca, ilk projeden DLL kullanan bir MVC3/Razor projesi oluşturdum. Ben seçeneğine tıkladığınızda "Add -> Kontrolörü" ve rahatsız edici bir hata alıyorum gerekli alanları doldurun:

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 

Bundan kaçınmak için, ben Görsel tarafından oluşturulan Groups.cs gitmeye gerek Studio ve 'System.ComponentModel.DataAnnotations;' kullanarak ekleyin ve daha sonra Gruplar alanının bildirisine [Anahtar] ekleyin. Ancak bu üretilen koddur. Varlık Çerçeve Projesi'ni yeniden derlersek, değişikliklerim kaybolacaktır.

Yani - Sorum şu: Ben neden olduğunu yanlış bir şey yaptığını

Am Visual Studio Anahtar alandır, veya İskele Kodu bu sadece bir hata olduğunu anlamaya muktedir değil Anahtarın olduğunu anlamasını engellemek.

Bunun yalnızca dizeye dayalı Primary Keys ile başarısız olduğunu belirtmeliyim. Alan bir Tamsayı olarak ilan edilmişse, her şey mükemmel çalışır. İşte

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] 

My Çevre bulunuyor: Burada

sorunlu tablodur SP3 ile 2010
  • Varlık Framework 4.1
  • MVC 3
  • SQL Server 2008
  • Visual Studio
  • +0

    Varlığınızı nasıl belirttiniz? – cpoDesign

    cevap

    1

    MVC İskele, bir sözleşme olarak, birincil anahtarın h bekliyor Mülkün adı üzerinde "Id" olarak, ama emin değilim.
    Eğer mümkünse, tablonun birincil anahtarı olarak kullanmak için bir surrogate key yaratacağım, böylece grup_adı değiştiğinde, ortaya çıkabilecek sorunları halledmem.

    +0

    Birkaç varyant denedim. MvcScaffolding soğuğu, veri tipine değil, özellik adına güveniyor gibi görünüyor. Bir Surrogate anahtarının eklenmesi bir seçenek değildir ve eski uygulamaları etkilemeden veritabanı şemasını değiştiremem. - Her neyse, bahsettiğim geçici çözüm sorunu gidermemi sağladı, ancak yine de MvcScaffolding'de bir hata olduğunu düşünüyorum. – Adrian

    +0

    Veritabanı şemasını değiştiremediğinizden, sınıfınıza DataAnnotation [Key] eklemek için T4 şablonunu değiştirebilirsiniz. Bu şekilde, modelinizi güncellediğinizde bunu kaybetmezsiniz. –

    1

    Varsayılan olarak EF özelliği PrimaryKey olarak değerlendirir, yalnızca ID veya {TableName}ID biçimindedir ... durumda GroupNameId veya Id.

    İkinci seçenek, alanın üstündeki Group_name by adding/decorating [Key] özniteliğidir.