Example #1
0
    public static SeedInfo GetSeedInfo(ITable table)
    {
        using (var tr = new Transaction())
        {
            string?message = null;

            ((SqlConnection)Transaction.CurrentConnection !).InfoMessage += (object sender, SqlInfoMessageEventArgs e) => { message = e.Message; };

            Executor.ExecuteNonQuery("DBCC CHECKIDENT ('{0}', NORESEED)".FormatWith(table.Name));

            if (message == null)
            {
                throw new InvalidOperationException("DBCC CHECKIDENT didn't write a message");
            }

            Match m = IdentityMessageRegex.Match(message);

            if (!m.Success)
            {
                throw new InvalidOperationException("DBCC CHECKIDENT messege has invalid format");
            }

            SeedInfo result = new SeedInfo
            {
                Identity = SeedInfo.Parse(m.Groups["identity"].Value),
                Column   = SeedInfo.Parse(m.Groups["column"].Value),
            };

            return(tr.Commit(result));
        }
    }