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

时间:2013-01-30 20:13:55

标签: 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; }
}

在数据库中,我希望IdAuto Increment列,TrNoPrimary Key列。

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

感谢。

4 个答案:

答案 0 :(得分:44)

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

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; }
}

答案 1 :(得分: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);
}

答案 2 :(得分:5)

显然@ 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的答案作为正确答案,因为它对我不起作用。

答案 3 :(得分:2)

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

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; }
}