2011-09-26 15 views
6

'dan çıkmadığı sürece, depo modeliyle Entity Framework 4.1 kullanıyorum (Veritabanı zaten var). Sorunum, GROUP (ayrılmış olan) adlı bir tablonun varlığıdır. Bu değişemediğim bir üretim veritabanı.'Group' ayrılmış bir anahtar sözcüktür ve bir takma ad olarak kullanılamaz,

Yani, aşağıdaki hatayı alıyorum her şeyden bu teknikler kullanılarak:

'Grup' ayrılmış bir anahtar kelime olduğunu ve kaçan sürece, bir takma ad olarak kullanılamaz. [GRUP] db bağlamıyla sınıfı aşağıdaki (soyunmuş)

public class AMTDatabase : DbContext 
    { 

     private IDbSet<GROUP> _Groups; 
     public IDbSet<GROUP> Group 
     { 
     get { return _Groups ?? (_Groups = DbSet<GROUP>()); } 
     } 


    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    {   
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<GROUP>().ToTable("GROUP");  
    } 
    //etc 
    } 
benziyor

EDIT:

tablo adı olarak aşağıdaki kullanmak Varlık Framework söylemek mümkün mü

Şimdiden teşekkürler.

+0

Kim size bu hatayı veriyor? Visual Studio'da mı yoksa veritabanınız mı? Sınıfınızın kodunu sorun yaşayabilir misiniz? –

+0

@AlexandreJobin: VS'de hatayı alıyorum. Ayrıca EDIT'e bakınız. –

cevap

1

Çok garip görünüyor, ama yukarıdaki özellik ismiyle dikkat edin: isim Gruptur ve Grupları okumalıdır! Bu hatayı alıyorum nedeni budur. Düzeltilen kod aşağıdaki gibidir:

private IDbSet<GROUP> _Groups; 
     public IDbSet<GROUP> Groups 
     { 
      get { return _Groups ?? (_Groups = DbSet<GROUP>()); } 
     } 

Şimdi bir çekicilik gibi çalışır!

+0

Sadece aynısını buldum ve sonuç bana çok garip geliyor. 'Context.Set () .ToList() 'kullanarak bile çalışır, ancak' context.Group.ToList()' yapmaz. Garip ... – Slauma

+0

Peki bu ne anlama geliyor? DBSet için istediğimiz adı seçemez miyiz? –

+1

Yani öyle görünüyor. DbSet '' Select', 'Join' ve' Where' gibi isimler vermeyi denedim. Hepsi aynı istisnayı atarlar. EF, SQL anahtar kelimelerinin bir listesini kontrol ediyor gibi görünüyor. Varlık adı 'Group'un kendisi sorun değil. – Slauma

0

deneyin size sınıf için başka adlandırmaları kullanabilir ve böylece veritabanınızda Grup tablosunu kullanmak için onu anlatmak için:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{   
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Entity<MyGroup>().ToTable("GROUP");  
} 

Veya varlık sınıfına doğrudan özelliklere sahip

:

[Table("Group")] 
public class MyGroup 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Column("GroupId")] 
    public int GroupId { get; set; } 
}