我正在创建asp.net mvc4示例.在此我在datacontext的Sample表中创建了Id列作为GUID.
public class Sample
{
[Required]
public Guid ID { get; set; }
[Required]
public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是实体表
CreateTable(
"dbo.Samples",
c => new
{
ID = c.Guid(nullable: false),
FirstName = c.String(nullable: false)
})
.PrimaryKey(t => t.ID);
Run Code Online (Sandbox Code Playgroud)
Id传递00000000-0000-0000-0000-000000000000.
如何设置newid()
到GUID
哪里我必须设置.
我来自一个nhibernate背景,我想知道如何在serer端自动生成Guid而不是在数据库端进行往返?
在流利的nhibernate中它很简单
Id(x => x.Id).GeneratedBy.GuidComb();
Run Code Online (Sandbox Code Playgroud) 顺序GUID是唯一的,但是是通过订单创建的; 该顺序略有异常,与使用标准.NET Guid比较器时获得的顺序不同.
我正在寻找一个C#Guid比较器,它将根据顺序GUID的规则进行排序.
==更新==
我特别指的是由SQL Server中的NewSequentialId()创建的顺序GUID,虽然我现在意识到标准的Win32 API调用UuidCreateSequential()使用与SQL Server不同的方案(我假设它们在我写这个问题时是相同的) .
==更新2 ==
petelids给出了以下答案,例如List <System.Data.SqlGuid> .Sort()给出以下序列(使用每个4位位置1的GUID的初始列表)...
01000000-0000-0000-0000-000000000000
10000000-0000-0000-0000-000000000000
00010000-0000-0000-0000-000000000000
00100000-0000-0000-0000-000000000000
00000100-0000-0000-0000-000000000000
00001000-0000-0000-0000-000000000000
00000001-0000-0000-0000-000000000000
00000010-0000-0000-0000-000000000000
00000000-0100-0000-0000-000000000000
00000000-1000-0000-0000-000000000000
00000000-0001-0000-0000-000000000000
00000000-0010-0000-0000-000000000000
00000000-0000-0100-0000-000000000000
00000000-0000-1000-0000-000000000000
00000000-0000-0001-0000-000000000000
00000000-0000-0010-0000-000000000000
00000000-0000-0000-0001-000000000000
00000000-0000-0000-0010-000000000000
00000000-0000-0000-0100-000000000000
00000000-0000-0000-1000-000000000000
00000000-0000-0000-0000-000000000001
00000000-0000-0000-0000-000000000010
00000000-0000-0000-0000-000000000100
00000000-0000-0000-0000-000000001000
00000000-0000-0000-0000-000000010000
00000000-0000-0000-0000-000000100000
00000000-0000-0000-0000-000001000000
00000000-0000-0000-0000-000010000000
00000000-0000-0000-0000-000100000000
00000000-0000-0000-0000-001000000000
00000000-0000-0000-0000-010000000000
00000000-0000-0000-0000-100000000000
Run Code Online (Sandbox Code Playgroud)
与List <System.Guid>返回的以下顺序相反..Sort()
00000000-0000-0000-0000-000000000001
00000000-0000-0000-0000-000000000010
00000000-0000-0000-0000-000000000100
00000000-0000-0000-0000-000000001000
00000000-0000-0000-0000-000000010000
00000000-0000-0000-0000-000000100000
00000000-0000-0000-0000-000001000000
00000000-0000-0000-0000-000010000000
00000000-0000-0000-0000-000100000000
00000000-0000-0000-0000-001000000000
00000000-0000-0000-0000-010000000000
00000000-0000-0000-0000-100000000000
00000000-0000-0000-0001-000000000000
00000000-0000-0000-0010-000000000000
00000000-0000-0000-0100-000000000000
00000000-0000-0000-1000-000000000000
00000000-0000-0001-0000-000000000000
00000000-0000-0010-0000-000000000000
00000000-0000-0100-0000-000000000000
00000000-0000-1000-0000-000000000000
00000000-0001-0000-0000-000000000000
00000000-0010-0000-0000-000000000000
00000000-0100-0000-0000-000000000000
00000000-1000-0000-0000-000000000000
00000001-0000-0000-0000-000000000000
00000010-0000-0000-0000-000000000000
00000100-0000-0000-0000-000000000000
00001000-0000-0000-0000-000000000000
00010000-0000-0000-0000-000000000000
00100000-0000-0000-0000-000000000000 …
Run Code Online (Sandbox Code Playgroud) 我看过这篇文章并尝试这样做
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CompanyID { set; get; }
Run Code Online (Sandbox Code Playgroud)
但是我仍然得到错误
Identity column 'CompanyID' must be of data type int, bigint, smallint, tinyint, or decimal or numeric with a scale of 0, and constrained to be nonnullable.
Run Code Online (Sandbox Code Playgroud)
这是我在包管理器控制台上运行Update-Database命令的时候.
首先查看代码,我看到一些用于[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
表示主键的示例,以及其他使用[Key]
.
我无法找到两者如何比较的描述。
有人可以告诉我何时/是否想使用其中一种而不是另一种吗?
我正在为我的项目使用实体代码首次迁移。我已经启动并运行了系统。但是,我需要添加一个新的 Guid 列,它是一个外键。在尝试更新数据库时,我收到以下错误:
ALTER TABLE 语句与 FOREIGN KEY 约束“FK_dbo.Categories_dbo.aspnet_Roles_RoleId”冲突。冲突发生在数据库“HelpDesk”、表“dbo.aspnet_Roles”、“RoleId”列中。
所以我做了一些研究,发现Entity Framework 6 Code first Default value。但是,我无法弄清楚如何让它为 Guid 设置默认值。这是我试过的代码:
这是迁移:
public override void Up()
{
AddColumn("dbo.Categories", "RoleId", c => c.Guid(nullable: false, defaultValue: "4468ACB7-AD6F-471E-95CF-615115EA3A76"));
CreateIndex("dbo.Categories", "RoleId");
AddForeignKey("dbo.Categories", "RoleId", "dbo.aspnet_Roles", "RoleId");
}
public override void Down()
{
DropForeignKey("dbo.Categories", "RoleId", "dbo.aspnet_Roles");
DropIndex("dbo.Categories", new[] { "RoleId" });
DropColumn("dbo.Categories", "RoleId");
}
Run Code Online (Sandbox Code Playgroud)
如果我切换到此代码,我能够摆脱所有构建错误(但如果我运行 Update-database,仍然会出现 Alter Table 错误:
AddColumn("dbo.Categories", "RoleId", c => c.Guid(nullable: false, identity: false, defaultValue: null));
Run Code Online (Sandbox Code Playgroud)
如何将其转换为添加特定 Guid 作为默认值?