[英]mvc entity framework model: a primary key and 2 more keys issue
所以我有以下模型
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Appointment
{
public int Id { get; set; }
public string Name{ get; set; }
}
我想將它們分配給具有單獨主鍵的另一個表,如下所示
public class UserAppointment
{
public int Id { get; set; }
public int UserId { get; set; }
public int AppointmentId { get; set; }
public virtual Appointment Appointment {get;set;}
public virtual User User {get;set;}
}
我想要的是將Id作為鍵(唯一,自動生成等),同時將同時強制UserId和AppointmentId具有唯一的組合。
eg
this is what i want
Id UserId AppointmentId
1 1 2
2 1 3
and not this
Id UserId AppointmentId
1 1 2
2 1 2
3 1 2
目前,我在上下文中做了一些modelbuilder語句來配置我的密鑰
modelbuilder.Entity<UserApointment>()
.HasRequired(e => e.User)
.HasMany(u => u.Appointment)
.HasForeignKey(e => e.UserId);
modelbuilder.Entity<UserApointment>()
.HasRequired(e => e.Appointment)
.HasMany(u => u.Users)
.HasForeignKey(e => e.AppointmentId);
但是它仍然可以讓我插入具有相似用戶名和約會ID的記錄。
非常感謝有關如何處理此問題的任何建議! 謝謝!!
您只需在UserAppointment表上創建唯一約束即可在數據庫級別解決此問題。
ALTER TABLE UserAppointments
ADD CONSTRAINT uc_UserAppointment UNIQUE (UserID,AppointmentID)
關於實體框架(我不熟悉)似乎是這樣完成的:
modelbuilder.Entity<UserApointment>().HasKey(x=> new { x.UserId,x.AppointmentId});
如果主鍵由多個屬性組成,則指定一個包括這些屬性的匿名類型。 例如,在C#中t => new {t.Id1,t.Id2}
更新
唯一索引可能更好地滿足您的目的:
CREATE UNIQUE INDEX IX_UserAppointment
ON UserAppointment (UserId, AppointmentId)
此唯一索引將確保表中將不存在UserId和AppointmentId的重復組合,並且還可以加快查詢速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.