Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
486 views
in Technique[技术] by (71.8m points)

c# - How to set initial value for auto incremented property (DatabaseGeneratedOption.Identity)

I have a class called Offer as follows:

public class Offer
{
    public Guid Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int OfferNo { get; set; }

    public OfferType OfferType { get; set; }
    public DateTimeOffset DateAdded { get; private set; }
    public DateTimeOffset DateEdited { get; set; }
    public bool IsActive { get; set; }
}

I am using Id property as my PK obviously. But I also need to display the Id of offers (as users will search for offers using this value) and the Guid property is too long for that.

Thus, I tried to use DatabaseGeneratedOption.Identity to auto increment the integer column OfferNo, but I can not set an initial value to increment on. I inserted a dummy entry and then tried to set OfferNo to something else than 1, but received the following exception:

Modifying a column with the 'Identity' pattern is not supported. Column: 'OfferNo'. Table: 'CodeFirstDatabaseSchema.Offer'.

I would like to set the initial value of this auto incremented column using code-first. An alternative solution will also be appreciated.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Just found a solution for this matter. You can simply call a Sql() method in your Up() method.

public override void Up()
    {
        CreateTable(
            "Offers",
            c => new
                {
                    OfferNo = c.Int(nullable: false, identity: true),
                    ...
                })
            .PrimaryKey(t => t.OfferNo);
        Sql("DBCC CHECKIDENT ('Offers', RESEED, 100);");
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...