Khóa tổng hợp với mã EF 4.1 Đầu tiên


105

Tôi đang cố gắng tìm ra cách có khóa tổng hợp bằng cách sử dụng mã EF Đầu tiên 4.1 RC.

Hiện tại, tôi đang sử dụng Chú thích dữ liệu [Khóa], nhưng tôi không thể chỉ định nhiều hơn một khóa.

làm thế nào để chỉ định một khóa tổng hợp?

Đây là ví dụ của tôi:

 public class ActivityType
{
    [Key]
    public int ActivityID { get; set; }

    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

Tôi cần "ActivityName" cũng là một khóa. Chắc chắn, tôi có thể viết mã cho vấn đề này, nhưng đó không phải là thiết kế cơ sở dữ liệu tốt.

Câu trả lời:


186

Bạn có thể đánh dấu cả hai ActivityIDActivityNamethuộc tính bằng Keychú thích hoặc bạn có thể sử dụng API thông thạo như được mô tả bởi @taylonr.

Biên tập:

Điều này sẽ hoạt động - khóa tổng hợp được xác định với chú thích yêu cầu thứ tự cột rõ ràng:

public class ActivityType
{
    [Key, Column(Order = 0)]
    public int ActivityID { get; set; }

    [Key, Column(Order = 1)]
    [Required(ErrorMessage = "A ActivityName is required")]
    [StringLength(50, ErrorMessage = "Activity Name must not exceed 50 characters")]
    public string ActivityName { get; set; }

}

Tôi hiểu rồi. Cảm ơn đã cập nhật cho tôi. Được đánh dấu là câu trả lời.
bugnuker

1
Dù sao để thêm các ràng buộc / chỉ mục duy nhất không thực sự là khóa?
Shimmy Weitzhandler

105

Chúng tôi không sử dụng các chú thích, thay vào đó chúng tôi ghi đè trình tạo mô hình, trong trường hợp đó, bạn có thể làm điều gì đó như:

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });

điều này không hiệu quả, nhưng tôi hy vọng một chú thích hoạt động. Có những mẫu với CTP 4 nhưng những công việc không còn trong 4.1 RC
bugnuker

3
Tôi biết bạn đang tìm kiếm chú thích, nhưng nghĩ sự giúp đỡ sức mạnh này trong việc tìm kiếm ... như tôi đã nói, chúng tôi không sử dụng các chú thích vì vậy tôi đã không có nhiều sự giúp đỡ đó ... hy vọng bạn tìm thấy những câu trả lời
taylonr

14
Tôi thích cách tiếp cận này. Giữ cho mô hình sạch các mối quan tâm về Bối cảnh. Cám ơn.
ctorx

Có ai biết việc đặt khóa chính tổng hợp bằng cách sử dụng api thông thạo có phù hợp với SQL CE không? Nó không hoạt động đối với tôi (xuất hiện lỗi 'EntityType ... không có khóa được xác định') và tôi không chắc có tạo câu hỏi mới hay không.
kasitan

Nếu bạn mô phỏng DbContext của mình cho mục đích thử nghiệm đơn vị, làm cách nào để bạn đảm bảo rằng modelBuilder được thực thi để xác định mối quan hệ giữa các thực thể và / hoặc khóa chính tổng hợp?
Jim Aho
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.