29

我有一个名为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 代码执行此操作。

谢谢。

4

4 回答 4

46

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

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; }
}
于 2013-01-30T20:24:22.897 回答
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);
}
于 2013-01-30T20:21:14.287 回答
6

显然@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; }
}

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

于 2016-11-11T10:37:21.117 回答
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; }
}
于 2017-09-22T16:09:43.863 回答