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.

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

}

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.