为依赖实体的身份属性生成非唯一值(实体框架核心)

时间:2016-09-06 14:21:26

标签: entity-framework entity-framework-core

我正在使用带有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的标识列)。

  • 商店1:假设我为商店1创建了第一个班次。数据库分配的班次ID为1.如果我为商店1创建了另一个班次,则将班次ID指定为2.到目前为止一切顺利。
  • 商店2:现在,当我创建第一个班次时,商店2将ID分配给值3. 我希望它将Id值分配给1。

我希望Shift的Id从每个商店记录的1开始。 我怎样才能做到这一点? 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

标识列必须包含唯一值。因此,无法多次为Shift的主ID分配相同的值。

您可以使用复合键而不是主键进行Shift。

引入新列ShiftNumber。然后使用此列+ Store的ID作为复合键(How do I map a composite primary key in Entity Framework 4 code first?)。