2012-06-18 35 views
12

Tôi muốn biết quy tắc khung thực thể nào tuân theo việc đặt tên/tạo các thuộc tính điều hướng. Tôi đã quan sát một số kịch bản mà dường như không có ý nghĩa vì vậy tôi đã tự hỏi nếu có ai biết chính xác làm thế nào những công việc này.Điều khiển khung thực thể Thuộc tính quy tắc tạo thuộc tính

Kịch bản 1:

public class Post 
{ 
    public int Id { get; set; } 
    public User Author { get; set; } 
} 

      Tạo

Scenario 1

tức. theo mặc định thuộc tính chuyển hướng tạo FKS tên [PropertyName] _id

Kịch bản 2:

Nó làm cho cảm giác rằng nếu EF tạo ra tài sản đó của định dạng [PropertyName] _id khi bạn tự xác định một Id FK nó sẽ làm theo các quy tắc tương tự tuy nhiên:

public class Post 
{ 
    public int Id { get; set; } 
    public int? Author_Id { get; set; } 
    public User Author { get; set; } 
} 

      Tạo

Scenario 2

Như bạn có thể thấy điều này không tự động đăng ký làm tài sản điều hướng.

Kịch bản 3:

Nếu nó không hoạt động cho Kịch bản 2 tại sao nó làm việc cho một quy ước đặt tên thay thế?

public class Post 
{ 
    public int Id { get; set; } 
    public int? AuthorId { get; set; } 
    public User Author { get; set; } 
} 

      Tạo

Scenario 3

các quy tắc xung quanh hướng phát hiện tài sản và thế hệ là gì?

+0

Chỉ cần nghĩ rằng tôi muốn liên kết lại để tốt [bài đăng blog] của bạn (http : //blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first) về Thuộc tính Điều hướng. – orad

+0

@orad lol cool, tôi thực sự đã hỏi câu hỏi này như là một phần của nghiên cứu cho bài đăng đó :) –

Trả lời

12

Đó là dự kiến ​​hành vi và nó được dựa trên hai công ước khác nhau dựa bởi EF

  • Trong ví dụ đầu tiên bạn đang sử dụng hiệp hội độc lập mà tổ chức của bạn không có tài sản FK. EF sẽ tạo FK trong cơ sở dữ liệu bằng cách sử dụng mẫu đơn giản: NameOfNavigationProperty_NameOfRelatedPK Quy ước này tuân theo cách đặt tên cơ sở dữ liệu truyền thống.
  • Trong ví dụ thứ hai, bạn đã xác định thuộc tính có cùng tên với FK được EF sử dụng. EF phát hiện ra điều này và thêm 1 vào FK được tạo ra của nó. Lý do tại sao tài sản của bạn không được sử dụng như FK là quy ước thứ hai tìm kiếm các thuộc tính FK. Công ước này hy vọng rằng tài sản FK sẽ có tên này (các quy ước theo truyền thống.NET đặt tên):
    • NameOfNavigationPropertyNameOfRelatedPK cung cấp bởi NavigationPropertyNameForeignKeyDiscoveryConvention
    • NameOfRelatedTypeNameOfItsPK cung cấp bởi TypeNameForeignKeyDiscoveryConvention
    • NameOfRelatedPK cung cấp bởi PrimaryKeyNameForeignKeyDiscoveryConvention
  • Trong ví dụ cuối cùng bạn được xác định một cách chính xác tài sản FK và EF phát hiện nó để nó sử dụng khóa ngoại liên kết.
+0

Cảm ơn bạn rất tiếc vì đã xem xét các quy ước đó –

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