2015-01-23 14 views
5

Tôi đang sử dụng EF 6.0 Mã đầu tiên, và tôi có tổ chức này:Entity Framework Change Primary Key Loại

public class TrainingRespect 
{ 
    [Key] 
    public int RespectId { get; set; } 

    public DateTime? DateWhenRespected { get; set; } 

    #region 

    public string UserId { get; set; } 
    public User User { get; set; } 

    public Guid TrainingId { get; set; } 
    public Trening Training { get; set; } 

    #endregion 
} 

Và tôi muốn thay đổi nó Primary Key (RespectId) từ int để GUID/chuỗi/Dài.

Cách dễ nhất để thực hiện việc này là gì? Tôi có thể thay đổi loại hình và di chuyển EF sẽ chăm sóc mọi thứ hay nó nên được thực hiện theo cách khác?

+0

Có vẻ như bạn đã có ý tưởng về điều gì đó bạn có thể làm. Bạn đã thử chưa? Câu trả lời phải là 'có'. – JamesT

+0

@JTolley Không, bởi vì tôi chắc chắn 99% rằng câu trả lời phải là "không". Tôi đã có một số trải nghiệm xấu trước đây với các phiên bản cũ hơn của EF whit này. Dù sao sau khi đọc bình luận của bạn tôi đã cố gắng để thay đổi nó từ int đến dài và chuỗi, và cả hai lần tôi đã nhận này err: 'Bàn không có một chỉ số nhóm không được hỗ trợ trong phiên bản này của SQL Server. Vui lòng tạo chỉ mục nhóm và thử lại. Không thể bỏ ràng buộc. Xem các lỗi trước đó. Tuyên bố đã bị chấm dứt.' – hyperN

+0

Bạn đang sử dụng phiên bản SQL Server nào? – JamesT

Trả lời

2

Ok để thực sự trả lời câu hỏi của bạn. bạn chỉ có thể thay đổi loại dữ liệu và Di chuyển sẽ xử lý nó.

Tuy nhiên, dựa vào nhận xét của bạn, bạn đang gặp sự cố khi áp dụng di chuyển này. Điều này không phủ nhận ở trên nhưng tôi sẽ cố gắng giúp đỡ bằng cách sử dụng một chút phỏng đoán.

Nếu bạn đang sử dụng Sql Azure, bạn phải có chỉ mục nhóm trên tất cả các bảng. EF6 nên tạo các chỉ mục nhóm ngay cả trên các phím chuỗi. Có một lỗi với alpha 3 mặc dù nó không tạo ra một khóa cụm trên bảng di chuyển.

http://entityframework.codeplex.com/discussions/435723

Xem liên kết ở trên để biết mô tả và giải pháp thay thế.

Nếu bạn vẫn gặp sự cố, bạn có thể chạy lệnh sau đây từ các gói giao diện điều khiển:

Update-Database -Script 

này sẽ tạo ra một Script SQL thay vì cố gắng để cập nhật trực tiếp. Bạn có thể xem xét điều này và xem có bất kỳ câu lệnh Tạo Bảng nào không có chỉ mục nhóm trên chúng hay không.

Nếu vì một lý do nào đó thì không. Bạn có thể sửa đổi một cách rõ ràng câu lệnh CreateTable của di chuyển của bạn để làm cho khóa chính được nhóm lại.

CreateTable("MyTable", 
    c => new { 
     Id = c.String(nullable: false, maxLength: 128) 
    }) 
.PrimaryKey(t => t.Id, null, true); 

Cũng đáng chú ý: Guids làm cho chỉ số clustered khủng khiếp. Nếu bạn đang sử dụng các phím GUID và có tùy chọn, không cụm vào chúng và có một chỉ số nhóm thứ hai thay thế.

+2

Để biết thông tin: phiên bản xem trước V12 của Azure cho phép các bảng không có chỉ mục nhóm http://azure.microsoft.com/en-gb/documentation/articles/sql-database-preview-whats-new/ – Colin

+0

Tôi đã mệt mỏi với sửa lỗi alpha 3, bây giờ tôi sẽ cố gắng cập nhật lên V12 và xem điều gì sẽ xảy ra, và tôi sẽ thử tùy chọn -Script, cảm ơn câu trả lời của bạn – hyperN

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