【问题标题】:Entity Framework Code First Using One column as Primary Key and another as Auto Increment Column实体框架代码首先使用一列作为主键,另一列作为自动增量列
【发布时间】:2013-01-14 18:55:54
【问题描述】:

我有一个名为 Sale

的课程
public class Sale
{
    public int Id { get; set; }
    public string TrNo { get; set; }
    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}

在数据库中,我希望Id 作为Auto Increment 列,TrNo 作为Primary Key 列。

请先告诉我如何使用 EF5 代码执行此操作。

谢谢。

【问题讨论】:

  • 如果 TrackingNumber 是一个好的自然标识符,为什么还需要 Id 列?
  • @Seevali 你解决了吗?我有同样的问题,请提供解决方案

标签: c# entity-framework ef-code-first


【解决方案1】:

您也可以使用数据注释来做到这一点:

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

    [Key]
    public string TrNo { get; set; }

    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}

【讨论】:

  • 谢谢。但不工作。它为我创建了一个表,其中只有 Id 列作为 PKAutoIncrement
  • 没有机会。和以前一样。
【解决方案2】:

我相信你可以使用 Fluent API 做到这一点

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Sale>().Property(a => a.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    modelBuilder.Entity<Sale>().Property(a => a.TrNo).HasKey(b => b.TrNo);
}

【讨论】:

  • 谢谢。但不工作。它为我创建了一个表,其中只有 Id 列作为 PKAutoIncrement
【解决方案3】:

显然@IronMan84 的answer 是正确的。但这对我不起作用。我稍微修改了它以应用我的另一个条件。它奏效了。我什么也没做。

这是我的解决方案。

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

    [Key, Column(TypeName = "varchar"), MaxLength(50)]
    public string TrNo { get; set; }

    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}

很遗憾,我无法将@IronMan84 的答案作为正确答案,因为它对我不起作用。

【讨论】:

    【解决方案4】:

    这对我有帮助。希望这可以帮助其他仍在环顾四周的人

    public class Sale
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]//switch on autogenerated
            public int Id { get; set; }
    
            [Key]//set as Primary key
            [DatabaseGenerated(DatabaseGeneratedOption.None)]// switch off autogenerated PK
            public string TrNo { get; set; }
    
            public DateTime Date { get; set; }
            public int CustomerID { get; set; }
    
            public ObservableCollection<SaleDetail> SaleDetails { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2015-09-02
      • 2013-01-15
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多