0
我使用實體框架核心與ASP.NET核心以代碼優先的方法。 這是簡化版本。我有兩個實體Store和Shift。 Shift是獨立實體,Store和Shift之間有許多關係。爲依賴實體(實體框架核心)的身份屬性生成非唯一值
實體店:
public partial class Store
{
[Display(Name = "Store Id")]
public int Id { get; set; }
[Display(Name = "Store Name")]
public string Name { get; set; }
public virtual ICollection<Shift> Shifts { get; set; } = new HashSet<Shift>();
}
轉變對實體
public partial class Shift
{
public int Id { get; set; }
public int StoreId { get; set; }
[Display(Name = "Start Time")]
public TimeSpan? StartTime { get; set; }
public virtual GasStation GasStation { get; set; }
}
以下是的DbContext流暢API配置
modelBuilder.Entity<Shift>().Property(t => t.StoreId)
.ValueGeneratedNever().IsRequired();
modelBuilder.Entity<Shift>().Property(t => t.Id).ValueGeneratedOnAdd().IsRequired();
modelBuilder.Entity<Shift>()
.HasKey(k => new { k.GasStationId, k.Id });
情景和目標 我想實現以下目標。商店實體可以有多個班次,班次編號在創建班次記錄時被分配(Id的標識列)。
- 商店1:假設我爲商店1創建了第一班。數據庫分配的班次ID爲1.如果我爲商店1創建另一個班次,則Shift Id被指定爲2。太好了。
- 店鋪2:現在店鋪2,當我創建第一個轉變的ID分配給值3 我希望它有分配到1的ID值
只要我想要的對於每個商店記錄,Shift的Id從1開始。 我該如何做到這一點? 在此先感謝您的幫助。
@George感謝您的回覆。我已經在做你所建議的了。如果你看最後一行,我設置了複合關鍵字modelBuilder.Entity() .HasKey(k => new {k.GasStationId,k.Id}); –
對不起,在最後一個代碼行中有一個類型,它應該如下'modelBuilder.Entity() .HasKey(k => new {k.StoreId,k.Id});' –