Kunci Komposit dengan Kode EF 4.1 Pertama

105

Saya mencoba mencari cara untuk memiliki kunci komposit menggunakan kode EF First 4.1 RC.

Saat ini, saya menggunakan Anotasi Data [Kunci], tetapi saya tidak dapat menentukan lebih dari satu kunci.

bagaimana cara menentukan kunci komposit?

Inilah Contoh saya:

 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; }

}

Saya perlu "ActivityName" juga menjadi kunci. Tentu, saya bisa membuat kode tentang ini, tapi itu bukan desain database yang bagus.

bugnuker
sumber

Jawaban:

186

Anda dapat menandai ActivityIDdan ActivityNameproperti dengan Keyanotasi atau Anda dapat menggunakan API yang lancar seperti yang dijelaskan oleh @taylonr.

Edit:

Ini harus berfungsi - kunci komposit yang ditentukan dengan anotasi memerlukan urutan kolom yang eksplisit:

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; }

}
Ladislav Mrnka
sumber
Saya melihat. Terima kasih telah memperbarui saya. Ditandai sebagai jawaban.
bugnuker
1
Pokoknya menambahkan kendala / indeks unik yang sebenarnya bukan kunci?
Shimmy Weitzhandler
105

Kami tidak menggunakan anotasi, sebagai gantinya kami mengganti pembuat model, dalam hal ini Anda dapat melakukan sesuatu seperti:

modelBuilder.Entity<Activity>().HasKey(a => new { a.ActivityId, a.ActivityName });
taylonr.dll
sumber
ini berfungsi, tetapi saya berharap anotasi berhasil. Ada sampel dengan CTP 4 tetapi ini tidak lagi berfungsi di 4.1 RC
bugnuker
3
Saya tahu Anda sedang mencari anotasi, tetapi menurut saya ini mungkin membantu dalam pencarian ... seperti saya katakan kami tidak menggunakan anotasi jadi saya tidak banyak membantu di sana ... harap Anda menemukan jawabannya
taylonr
14
Saya suka pendekatan ini. Menjaga model tetap bersih dari masalah Konteks. Terima kasih.
ctorx
Apakah ada yang tahu apakah menyetel kunci utama komposit menggunakan api fasih berfungsi untuk SQL CE? Ini tidak berfungsi untuk saya (memberikan kesalahan bahwa 'EntityType ... tidak memiliki kunci yang ditentukan') dan saya tidak yakin untuk membuat pertanyaan baru atau tidak.
kasitan
Jika Anda mengejek DbContext Anda untuk tujuan pengujian unit, bagaimana Anda memastikan modelBuilder dijalankan untuk menentukan hubungan antara entitas dan / atau kunci utama komposit?
Jim Aho