实体框架代码首先使用一列作为主键,另一列作为自动增量列

See*_*ake 28 c# entity-framework ef-code-first

我有一个名为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; }
}
Run Code Online (Sandbox Code Playgroud)

在数据库中,我希望IdAuto Increment列作为列,而TrNoPrimary Key列作为列.

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

谢谢.

Iro*_*n84 45

您也可以使用数据注释执行此操作:

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; }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。但不工作。它创建了一个表,其中只有“Id”列作为“PK”和“AutoIncrement”列 (2认同)

Jak*_*ake 17

我相信你可以使用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);
}
Run Code Online (Sandbox Code Playgroud)


See*_*ake 5

显然,@ IronMan84 的答案正确。但这对我没有用。我对其稍加修改,以适用于其他条件。而且有效。我什么也没做。

这是我的解决方案。

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; }
}
Run Code Online (Sandbox Code Playgroud)

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


小智 5

这对我有帮助。希望这对仍在四处寻找的其他人有所帮助

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; }
}
Run Code Online (Sandbox Code Playgroud)