Công ty của tôi hiện đang trong quá trình viết lại một ứng dụng mà chúng tôi đã mua gần đây. Chúng tôi đã chọn sử dụng ASP.net mvc4 để xây dựng hệ thống này cũng như sử dụng Khuôn khổ thực thể làm ORM của chúng tôi. Chủ sở hữu trước đây của công ty chúng tôi có được là rất kiên quyết rằng chúng tôi sử dụng cơ sở dữ liệu cũ và không thay đổi bất cứ điều gì về nó để khách hàng có thể sử dụng sản phẩm của chúng tôi đồng thời với hệ thống cũ trong khi chúng tôi đang phát triển các mô-đun khác nhau.Sự khác biệt giữa khóa chính và chỉ mục duy nhất trong SQL Server
Tôi phát hiện ra rằng các cấu trúc bảng cũ không có khóa chính, thay vào đó, nó sử dụng một chỉ mục duy nhất để phục vụ như là khóa chính của chúng. Bây giờ khi sử dụng khung Entity, tôi đã cố gắng kết hợp các bảng của chúng trong cấu trúc nhưng không thể làm như vậy khi EF tạo ra một khóa chính thay vì một chỉ mục duy nhất.
Khi tôi liên hệ với chủ sở hữu trước đó và giải thích, anh ấy nói với tôi rằng "Khóa duy nhất trong mỗi bảng là Khóa chính. Chúng là từ đồng nghĩa với nhau".
Tôi vẫn còn tương đối mới đối với các hệ thống cơ sở dữ liệu nên tôi không chắc liệu điều này có đúng không. Bất cứ ai có thể làm rõ điều này?
bảng của mình khi đổ vào SQL tạo:
-- ----------------------------
-- Indexes structure for table AT_APSRANCD
-- ----------------------------
CREATE UNIQUE INDEX [ac_key] ON [dbo].[AT_APSRANCD]
([AC_Analysis_category] ASC, [AC_ANALYSI_CODE] ASC)
WITH (IGNORE_DUP_KEY = ON)
GO
tuy nhiên hệ thống của tôi tạo ra:
-- ----------------------------
-- Primary Key structure for table AT_APSRANCD
-- ----------------------------
ALTER TABLE [dbo].[AT_APSRANCD] ADD PRIMARY KEY ([AC_Analysis_category])
GO
EDIT: Theo dõi câu hỏi này là thế nào tôi sẽ đi về thiết kế các mô hình cho điều này? Tôi chỉ được sử dụng để sử dụng chú thích [Key] xác định nó như là một khóa chính, và không có nó, EF sẽ không tạo ra bảng đó. nên một cái gì đó như thế này:
[Table("AT_APSRANCD")]
public class Analysis
{
[Key]
public string AnalysisCode { get; set; }
public string AnalysisCategory { get; set; }
public string ShortName { get; set; }
public string LongName { get; set; }
}
Kiểm tra câu trả lời của tôi cho khóa tổng hợp ví dụ trong EF. – paqogomez
Lưu ý sự khác biệt bổ sung: ban đầu là hơn hai cột, và ban đầu bỏ qua các giá trị trùng lặp. –
Nếu DB đã tồn tại, tại sao bạn không để EF tạo ra tất cả các thực thể của bạn? – RobH