13

私はasp.net mvc4サンプルを作成しています。これで、データコンテキストのサンプルテーブルにID列をGUIDとして作成しました。

public class Sample
{
    [Required]
    public Guid ID { get; set; }
    [Required]
    public string FirstName { get; set; }
}

これはエンティティテーブルです

CreateTable(
"dbo.Samples",
 c => new
 {
     ID = c.Guid(nullable: false),
     FirstName = c.String(nullable: false)                   
 })
 .PrimaryKey(t => t.ID);

ID パス 00000000-0000-0000-0000-000000000000。

設定方法と設定newid()するGUID場所。

4

7 に答える 7

14

longIDタイプにのみ使用することをお勧めします。それは「そのまま動作」し、GUID よりもパフォーマンスが向上します。ただし、GUID を使用する場合は、Sequential GUIDを使用してコンストラクターで設定する必要があります。ID をprivateセッターにすることもできます。

public class Sample
{
    public Sample() {
        ID = GuidComb.Generate();
    }
    [Required]
    public Guid ID { get; private set; }
    [Required]
    public string FirstName { get; set; }
}

順次 GUID

public static class GuidComb
    {
        public static Guid Generate()
        {
            var buffer = Guid.NewGuid().ToByteArray();

            var time = new DateTime(0x76c, 1, 1);
            var now = DateTime.Now;
            var span = new TimeSpan(now.Ticks - time.Ticks);
            var timeOfDay = now.TimeOfDay;

            var bytes = BitConverter.GetBytes(span.Days);
            var array = BitConverter.GetBytes(
                (long)(timeOfDay.TotalMilliseconds / 3.333333));

            Array.Reverse(bytes);
            Array.Reverse(array);
            Array.Copy(bytes, bytes.Length - 2, buffer, buffer.Length - 6, 2);
            Array.Copy(array, array.Length - 4, buffer, buffer.Length - 4, 4);

            return new Guid(buffer);
        }
    }
于 2013-08-13T04:55:25.373 に答える
6

これが良いアイデアであるかどうかについての政治を無視すると、@TombMediaによる答えがあなたが探しているものである可能性が最も高くなります.

ただし、既存のテーブルに新しい列を追加する必要があり、フィールドが null 可能ではないため、デフォルト値に使用されるように newId() を指定する必要がある場合は、移行クラスでこれを使用します。

AddColumn(
    "dbo.Samples",
    "UUID", 
    c => c.Guid(nullable: false, defaultValueSql: "newId()")
);

注: これは EF6 にまだ関連する古い質問であり、EF 移行内で newId を使用する方法についての支援を探すときに上位にランクされるため、この回答が追加されました。

于 2018-10-17T05:05:46.967 に答える
5

データベースへの Nlog ロギングで同じ問題が発生しました。私がしたことは、意図的に移行ファイルを開き、次の変更を加えたことです

CreateTable(
"dbo.Samples",
c => new
{
     ID = c.Guid(nullable: false,identity:true),
     FirstName = c.String(nullable: false)
})
.PrimaryKey(t => t.ID);

ID パラメータは、実際には table のdefaultvalueようnewsequentialid() にテーブルを作成しました。

于 2014-02-19T12:14:36.227 に答える