Подтвердить что ты не робот

Entity Framework Code Сначала используется один столбец в качестве основного ключа, а другой - в качестве столбца автоматического увеличения

У меня есть класс с именем Продажа

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.

Спасибо.

4b9b3361

Ответ 1

По-видимому, правильный ответ у 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 правильным, поскольку он не работает для меня.

Ответ 2

Вы также можете сделать это с помощью аннотаций данных:

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

Ответ 3

Я считаю, что вы можете сделать это с помощью 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);
}

Ответ 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; }
}