How to set NewId() for GUID in entity framework

后端 未结 7 1222
孤街浪徒
孤街浪徒 2020-12-06 01:43

I am creating asp.net mvc4 sample.In this i created Id column as GUID in Sample table of datacontext.

public class Sample
{
    [Required]
    public Guid          


        
7条回答
  •  一向
    一向 (楼主)
    2020-12-06 02:25

    I would recommend just using long for your ID type. It "just works" with and has some performance gains over GUID. But if you want to use a GUID, you should use a Sequential GUID and set it in the constructor. I would also make ID a private setter:

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

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

提交回复
热议问题