2011-07-20 32 views
6

Tôi đang làm Mã EF Phát triển đầu tiên dựa vào cơ sở dữ liệu hiện có. Vì tôi đã được đưa ra một lược đồ và một số tên bảng không lý tưởng, tôi muốn đặt tên một số lớp thực thể khác với bảng bên dưới và thực hiện ánh xạ trong OnModelCreating. Không thể ánh xạ thực thể vào bảng nếu một thực thể khác có cùng tên với bảng

Điều này dường như không hoạt động nếu tên lớp thực thể xung đột với tên bảng hiện có, ngay cả khi tôi remap chúng trong mã.

Với những (tạo thành ví dụ này) các lớp thực thể:

  • Widget
  • Gadget

Tôi đang cố gắng để thực hiện ánh xạ sau trong OnModelCreating:

modelBuilder.Entity<Gadget>.ToTable("Sprocket"); 
modelBuilder.Entity<Widget>.ToTable("Gadget"); 

Khi thời gian chạy, điều này mang lại lỗi sau:

System.InvalidOperationException : The entity types 'Widget' and 'Gadget' cannot share table 'Gadget' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them.

Điều này không có ý nghĩa khi tôi ánh xạ đối tượng Gadget ra khỏi bảng Tiện ích nhưng dường như một số ánh xạ đang diễn ra tự động ngay cả khi tôi chỉ định rõ ràng.

Giải thích cho hành vi này là gì và có thể giải quyết được không?

Trả lời

2

Các thực thể và tên bảng của bạn có phải là số ít không?

Lý do tôi hỏi là nếu bạn đang cố gắng làm điều gì đó như

modelBuilder.Entity<Gadget>.ToTable("Sprockets") 
modelBuilder.Entity<Widget>.ToTable("Gadgets") 

nó có thể không hoạt động vì EF: CF bản đồ thực thể để bảng số nhiều của họ theo quy ước. Nếu bạn muốn xóa quy ước này, chỉ cần xóa PluralizingTableNameConvention.

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
+0

Cảm ơn đã gợi ý, nhưng tôi đã có mà dòng mã tại chỗ. Trên một ý thích, tôi đã cố gắng loại bỏ nó và kết quả là như nhau. –

+0

Nếu bạn có quyền kiểm soát tên đối tượng của mình, tại sao bạn không chỉ đặt tên cho một tên bảng? – OpticalDelusion

+2

Bạn tăng điểm tốt. Tôi có thể làm điều đó, nhưng tại thời điểm này, tôi vẫn muốn được biết tại sao nó không hoạt động. –

0

Dường như trường hợp khi bảng có cùng tên trong khác nhau schema. Cho đến ngày hiện tại, không có sự hỗ trợ của EF trong khía cạnh này. Ví dụ:

dict.Gadget 
cnfg.Gadget 

Vui lòng kiểm tra https://entityframework.codeplex.com/workitem/1641 và bỏ phiếu để tăng tầm quan trọng của bản sửa lỗi này.

1

FYI: EF WorkItem 1641 đã nói ở trên đã được cố định trên version 6.1.2

Các vấn đề liên quan