Есть ли.NET equalent к SQL Server newsequentialid ()

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

31
задан John 10 February 2017 в 10:48
поделиться

6 ответов

Должно быть возможно создать последовательный GUID в c# или vb.net с помощью вызова API UuidCreateSequential. Объявление API (C#) ниже было взято от Pinvoke.net , где можно также найти полный пример того, как вызвать функцию.

[DllImport("rpcrt4.dll", SetLastError=true)]
static extern int UuidCreateSequential(out Guid guid);

статья MSDN, связанная с функцией UuidCreateSequential, может быть найдена здесь , который включает предпосылки для использования.

26
ответ дан 27 November 2019 в 22:00
поделиться

Unfortunatley, нет нет.NET, эквивалентной newsequentialid(). Вы могли продолжить использовать Расческу. У меня на самом деле есть реализация C# Расчески где-нибудь... Я буду видеть, могу ли я вскопать его.

1
ответ дан 27 November 2019 в 22:00
поделиться

Возможно, простой способ определить порядок, в котором были добавлены строки, будет состоять в том, чтобы добавить столбец IDENTITY к таблице, избегая потребности поддерживать Ваши ГУИДЫ В ПОРЯДКЕ и следовательно избегая хита производительности поддержания кластерного индекса на столбце GUID.

я не могу не задаться вопросом, как поддержание в порядке этих строк помогает Вам при отладке. Вы могли развернуть это немного?

9
ответ дан 27 November 2019 в 22:00
поделиться

Ключевая проблема знает то, что последнее значение было в приложении.NET. SQL Server отслеживает это для Вас. Необходимо будет держать последнее значение сами и использовать конструктора Guid с массивом байтов, содержащим следующее значение. Конечно, на распределенном приложении это, вероятно, не собирается помогать, и Вам, вероятно, придется использовать рандомизированные Гуиды. (Не то, чтобы я вижу что-то не так с этим.)

http://msdn.microsoft.com/en-us/library/90ck37x3.aspx

-1
ответ дан 27 November 2019 в 22:00
поделиться

Я был выводом, чтобы полагать, что случайные Гуиды могут быть выгодны для производительности в некоторых вариантах использования. По-видимому, вставка в случайные страницы может избежать конкуренции, которая иначе произошла бы на странице конца, когда несколько человек пытаются вставить одновременно.

предложения John's PInvoke являются, вероятно, самыми близкими к версии SQL, но документы UUidCreateSequential указывают, что Вы не должны использовать ее для идентификации объекта, что это строго локально для машины, генерирующей Гуид.

я измерил бы фактический уровень варианта использования, пораженный реалистическими данными в реалистических количествах, прежде чем я исследовал последовательное поколение Гуида дальше.

0
ответ дан 27 November 2019 в 22:00
поделиться

Вот код C # для генерации COMB GUID.

byte[] guidArray = System.Guid.NewGuid().ToByteArray();

DateTime baseDate = new DateTime(1900, 1, 1);
DateTime now = DateTime.Now;

// Get the days and milliseconds which will be used to build the byte string 
TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks);
TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks));

// Convert to a byte array 
// Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 
byte[] daysArray = BitConverter.GetBytes(days.Days);
byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333));

// Reverse the bytes to match SQL Servers ordering 
Array.Reverse(daysArray);
Array.Reverse(msecsArray);

// Copy the bytes into the guid 
Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2);
Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4);

return new System.Guid(guidArray);
3
ответ дан 27 November 2019 в 22:00
поделиться