2011-09-26 5 views
6

Tôi đang sử dụng Khuôn khổ thực thể 4.1 với mẫu kho lưu trữ (Cơ sở dữ liệu đã tồn tại). Vấn đề của tôi là sự tồn tại của một bảng gọi là GROUP (được dành riêng). Đây là cơ sở dữ liệu sản xuất mà tôi không thể thay đổi.'Nhóm' là từ khóa dành riêng và không thể được sử dụng làm bí danh, trừ khi nó được thoát ra

Vì vậy, sử dụng tất cả các kỹ thuật này trên tôi nhận được lỗi sau:

'Nhóm' là một từ khóa dành riêng và không thể được sử dụng như một bí danh, trừ khi nó được thoát.

Có thể nói với Entity Framework để sử dụng sau đây như tên bảng: [GROUP]

EDIT Các lớp học với bối cảnh db trông giống như sau (rút gọn)

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 
    } 

Cảm ơn trước

+0

Ai đang cho bạn lỗi này? Có phải trong Visual Studio hoặc cơ sở dữ liệu của bạn? Bạn có thể đăng mã của lớp học của bạn có vấn đề? –

+0

@AlexandreJobin: Tôi gặp lỗi trong VS. Xem thêm EDIT. –

Trả lời

1

Có vẻ như rất lạ, nhưng hãy chú ý đến tên thuộc tính ở trên: tên là Nhóm và nên đọc Nhóm! Đây là lý do tôi nhận được lỗi này. Mã đã sửa là như sau:

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

Làm việc như một sự quyến rũ ngay bây giờ!

+0

Chỉ tìm thấy giống nhau và kết quả có vẻ rất lạ với tôi. Ngay cả khi sử dụng 'context.Set () .ToList()' hoạt động, nhưng 'context.Group.ToList()' thì không. Lạ ... – Slauma

+0

Vì vậy, điều này có nghĩa là ... tôi bối rối! Chúng ta không thể chọn bất cứ cái tên nào chúng ta muốn cho DBSet ?? –

+1

Vì vậy, có vẻ như. Tôi vừa thử nghiệm để cung cấp cho 'DbSet ' các tên như 'Select',' Join' và 'Where'. Tất cả họ đều ném cùng một ngoại lệ. EF dường như kiểm tra danh sách các từ khóa SQL. Tên thực thể 'Nhóm' chính nó không phải là vấn đề. – Slauma

0

Cố gắng sử dụng đặt tên khác cho bạn lớp và nói với anh ta sử dụng bảng Nhóm trong cơ sở dữ liệu của bạn như vậy:

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

Hoặc với các thuộc tính trực tiếp trên lớp thực thể của bạn:

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