【问题标题】:Entity Framework Core 2.0 autoincrement and primary key mappingEntity Framework Core 2.0 自动增量和主键映射
【发布时间】:2018-06-19 12:03:00
【问题描述】:

我正在将数据库优先项目转换为代码优先项目。

我有以下课程,我正在使用 EF Core 2.0:

public class WorkUser
{
    public int WorkUserId { get; set; }

    public int UserId { get; set; }
}

我尝试了以下,不确定是否正确。

public class WorkUser
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int WorkUserId { get; set; }

    [Key]
    public int UserId { get; set; }
}

我希望WorkUserId 作为自动增量属性,UserId 作为主键。 UserId 值来自另一个表。所以希望这是主键但没有自动增量。

如何做到这一点?

【问题讨论】:

  • 你真的试过你的代码吗?它会产生什么?
  • 什么是BaseEntity?你有问题吗,如果有,是什么问题?现在,这不是一个真正的问题。
  • should work as you expect,但您需要确保将UserId 设置为有效的唯一值。如果此表具有多对多关系,您将需要由UserIdWorkUserId 组成的a composite key(即添加一个Key 属性和一个带有Order 属性的Column 属性.)
  • @Zhaph-BenDuguid 谢谢。这个表不会有多对多的关系。
  • @DavidG 我已通过删除基础实体进行了更新。

标签: c# entity-framework-core asp.net-core-2.0


【解决方案1】:

以下按我的预期工作:

public class WorkUser
{
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int WorkUserId { get; set; }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int UserId { get; set; }
}

【讨论】:

    【解决方案2】:

    试试这个:

    public class SampleContext:DBContext{
    public DbSet<WorkUser> WorkUsers{ get; set; }
    
    protected override void OnModelCreating(ModelBuilder modelBuilder){
        modelBuilder.Entity<WorkUser>()
            .Property(p => p.WorkUserId )
            .ValueGeneratedOnAdd();
     }
    }
    

    【讨论】:

      【解决方案3】:

      在 EF Core 中,您应该使用序列作为解决方案。

          public class Project
          {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }
            public int ProjectId { get; set; }
          }
      

      然后配置你的 onModelBuilder:

      modelBuilder.HasSequence<int>("ProjectId").StartsAt(100).IncrementsBy(1);
      modelBuilder.Entity< Project>().Property(o => o.ProjectId).HasDefaultValueSql("NEXT VALUE FOR ProjectId");
      

      或者您可以在docs 上阅读更多信息。

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 2022-09-27
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-17
        • 2018-10-19
        相关资源
        最近更新 更多