asp.net-mvc - 如何在 Entity Framework 中为GUID设置NewId()

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 entity-framework-5

我正在创建 asp.net mvc4 示例。在此我在 datacontext 示例表中创建了 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 以及我必须设置的位置。

最佳答案

我建议您仅使用 long 作为您的 ID 类型。它“只适用于”GUID,并且比 GUID 有一些性能提升。但如果您想使用 GUID,则应该使用 Sequential GUID并在构造函数中设置它。我还将 ID 设置为 private setter:

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

关于asp.net-mvc - 如何在 Entity Framework 中为GUID设置NewId(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200817/

相关文章:

asp.net-mvc - 电话号码或社会保险号的 DisplayFormat.DataFormatString

asp.net-mvc-3 - 在 IIS/ASP.NET MVC3 中更改路由/文件夹优先级

c# - 创建返回多条错误消息的自定义 ValidationAttribute 类

c# - EF 5 启用迁移 : No context type was found in the assembly

c# - MVC 4 Entity Framework 一个特定的列不更新

c# - .Net MVC 返回文件然后删除它

jquery - 突出显示或更改 @Html.DropDownList 具有焦点时的边框或背景

asp.net-mvc - 共享数据的 Multi-Tenancy 应用程序(Asp net mvc + Entity Framework + Sql Server)

asp.net-mvc-3 - 带有 Autofac 简单网格绑定(bind)的 DevExpress

asp.net-mvc - 在 ASP.NET MVC4 中存储用户信息的策略是什么