簡體   English   中英

mvc實體框架模型:主鍵和另外2個鍵的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM