2009-03-12 26 views
6

tôi đang đánh giá sử dụng EF chống lại một lược đồ hiện có - vấn đề là tôi không thể làm việc ra làm thế nào để thiết lập mối liên quan giữa bàn nơi nước ngoài chính là KHÔNG khóa chính của bảng tổng thể.Làm thế nào để xử lý các phím "thứ yếu" trong Entity Framework

Như một ví dụ, một foo có thể có nhiều bars như đã định nghĩa như thế này (tha thứ cho những giả):

table foo { 
    int foo\_id pk, 
    char(10) foo\_code, 
    ... 
} 

table foobar { 
    int bar\_id pk, 
    char(10) bar\_foo\_code fk(foo.foo\_code), 
    ... 
} 

tôi đang thiếu gì để có thể tạo ra sự liên kết foo_foobar, và do đó một tài sản Bars navigation trên thực thể Foo?

+0

Chúng tôi đã có cùng một vấn đề ở đây và cuối cùng phải thực hiện thay đổi đối với cơ sở dữ liệu của chúng tôi để các khóa ngoại chỉ trỏ đến các khóa chính. Không có cách nào bạn có thể thay đổi lược đồ cơ sở dữ liệu của bạn? – CraftyFella

+0

Thật không may là không - lược đồ là một cơn ác mộng vì lý do di sản, và chúng tôi phải tương tác với nó. Sucks, tôi biết. Điều đó đang được nói, tôi đã thấy các trường hợp hoàn toàn chính xác để có cả khóa chính và khóa ngoài riêng biệt (có thể kết hợp). – Rammesses

Trả lời

3

LINQ to Entities không hỗ trợ phím nước ngoài không trỏ đến khóa chính của một bảng (xem log nhắn 3). LINQ cho các thực thể sẽ coi nó như một trường bình thường trên một bảng. Bạn sẽ không thể điều hướng đến đối tượng được liên kết.

Nếu bạn có lược đồ hiện tại, tôi khuyên bạn nên sử dụng edm generator vì điều này sẽ tạo tệp EMDX, mã phía sau và thậm chí cả mã xem (có thể rất lớn). Nếu sơ đồ hiện tại của bạn khá lớn Hãy kiểm tra điều này post, giải thích cách xử lý các lược đồ lớn.

Khi bạn chạy EDM Generator bạn sẽ tìm ra tất cả những điều mà không được hỗ trợ.

Nhìn vào một EDMGen2.exe trước log chúng tôi đã nhận các loại sau đây của thông điệp lại:

  1. Các kiểu dữ liệu 'sql_variant' không phải là
    được hỗ trợ, cột 'ColumnName' trong bảng 'TableName' đã bị loại trừ .
  2. Bảng/xem 'tableName' không có một khóa chính xác định. Chìa khóa đã được suy ra và định nghĩa đã được tạo ra như một chỉ đọc bảng/xem
  3. Mối quan hệ 'RelationshipName' có các cột mà không phải là một phần của phím của bảng trên phía sơ cấp của mối quan hệ không được hỗ trợ, mối quan hệ bị loại trừ.

Chúng tôi cũng nhận thấy rằng dự án Linq thực sự bị hỏng Visual Studio khá nhiều vì tệp mã do EDM sản xuất vượt quá 80 mb.

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