Chúng tôi đã sử dụng EF 4.0 với phương pháp tiếp cận cơ sở dữ liệu đầu tiên sử dụng mô hình .edmx
.Ảnh hưởng đến cách các lớp thực thể được tạo trong EF 6 mã đầu tiên từ cơ sở dữ liệu
Hiện chúng tôi đang nâng cấp lên EF 6.1.3 và chúng tôi đang điều tra xem có nên đi cùng hoặc không có mô hình đó .edmx
. Chúng tôi chắc chắn vẫn muốn kiểm soát lược đồ cơ sở dữ liệu của mình - vì vậy chúng tôi sẽ tạo các bảng mới, v.v. với kịch bản SQL và sau đó tạo mô hình EF (hoặc .edmx
hoặc chỉ các lớp mã) từ cơ sở dữ liệu hiện có.
Trong các thử nghiệm của tôi với Visual Studio 2013, tôi nhận thấy một điểm gây phiền nhiễu khi EF 6 tạo các lớp từ cơ sở dữ liệu hiện có. Tôi có một lớp học Customer
liên kết với một lớp học Contact
ba lần - một lần cho số DesignContact
, một lần cho số SalesContact
và lần thứ ba cho số SupportContact
. Chúng được lưu trữ dưới dạng các cột DesignContactId (INT)
v.v. trong bảng Customer
.
Bạn có thể tạo ra những lớp học sử dụng này T-SQL:
CREATE TABLE dbo.Contact
(
ContactID INT NOT NULL
CONSTRAINT PK_Contact PRIMARY KEY CLUSTERED,
Name VARCHAR(200),
Address VARCHAR(200),
ZipCode VARCHAR(20),
City VARCHAR(100),
Phone VARCHAR(100)
)
CREATE TABLE dbo.Customer
(
CustomerID INT NOT NULL
CONSTRAINT PK_Customer PRIMARY KEY CLUSTERED,
Name VARCHAR(200),
-- other properties
DesignContactID INT
CONSTRAINT FK_Customer_DesignContact
FOREIGN KEY REFERENCES dbo.Contact(ContactID),
SalesContactID INT
CONSTRAINT FK_Customer_SalesContact
FOREIGN KEY REFERENCES dbo.Contact(ContactID),
SupportContactID INT
CONSTRAINT FK_Customer_SupportContact
FOREIGN KEY REFERENCES dbo.Contact(ContactID),
)
Khi tạo các lớp từ cơ sở dữ liệu, tôi thấy điều này:
- lớp
Customer
có baxxxContactId
cột của tôi như là lĩnh vực - đó là như mong đợi - EF cũng tạo ra ba thuộc tính điều hướng của loại
Contact
- nhưng nó gọi chúng làContact
,Contact1
,Contact2
- uuuuuggghHHHH!
Tôi đang cố gắng để tìm một cách để có được xung quanh những đặc tính chuyển hướng tên khủng khiếp xấu ..... đây là xấu bởi vì:
- không trực quan của họ - mà một trong những điểm mà tiếp xúc với doanh nghiệp ?
- là "ổn định" hoặc chúng có thể thay đổi theo thời gian không, nếu mối quan hệ thứ tư với
Contact
được giới thiệu? Không chắc ..... (không thể tìm thấy bất kỳ tài liệu nào về điều này) - chỉ tên của chúng hoàn toàn khủng khiếp ...... tại sao chúng không được gọi là
DesignContact
(dựa trênDesignContactId
),SalesContact
(dựa trênSalesContactId
) vv?
Trong EF 4.1 trở lên, bạn có thể thêm mẫu T4 vào .edmx
và ảnh hưởng đến quá trình tạo - vẫn có thể bằng EF6, nếu bạn đang làm "Tạo mã đầu tiên từ cơ sở dữ liệu hiện có" tiếp cận? Tôi không thể tìm thấy bài đăng hoặc bài đăng trên blog về chủ đề đó nữa .....
Hoặc có cách nào khác để ảnh hưởng đến cách EF tạo ra các lớp học hay không - đặc biệt là các thuộc tính điều hướng? Tôi có thể định nghĩa một số loại quy ước tùy chỉnh hay cái gì đó để gây ảnh hưởng đến điều này không?
@JulieLerman: bất kỳ suy nghĩ về vấn đề này (như _Queen của EF_ :-)?) –
@RowanMiller: bất kỳ ý tưởng hay thủ thuật nào lên tay áo của bạn để xử lý điều này? –
Có thể áp dụng: http://stackoverflow.com/a/13064383/1207195? (không được bỏ phiếu là lừa bởi búa) –