我正在使用带有ASP.NET Core的Entity Framework Core和代码优先方法。 这是简化版。我有两个实体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 });
情景和目标 我想实现以下目标。 Store实体可以有多个班次,并且在创建Shift记录时分配班次编号(Id的标识列)。
我希望Shift的Id从每个商店记录的1开始。 我怎样才能做到这一点? 在此先感谢您的帮助。
答案 0 :(得分:0)
标识列必须包含唯一值。因此,无法多次为Shift的主ID分配相同的值。
您可以使用复合键而不是主键进行Shift。
引入新列ShiftNumber。然后使用此列+ Store的ID作为复合键(How do I map a composite primary key in Entity Framework 4 code first?)。