gpt4 book ai didi

c# - 自动生成不是 Entity Framework 中主键的 GUID 列

转载 作者:太空狗 更新时间:2023-10-29 23:30:53 26 4
gpt4 key购买 nike

我要从现有模型和数据库迁移到 Entity Framework 。在该数据库中,有几个表的 GUID 列不是主键(或根本不是键!)。每个表都有一个 ID 列。 GUID 列具有在其上定义的 ROWGUIDCOL 属性以及 DEFAULT(newid())。

现在,当我插入数据库时​​,我得到该列的所有零。

我试过使用数据注释:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Guid {get; set;}

这个问题是它删除了我的 ID 列上的标识属性(并给我插入错误)。除此之外,我注意到对于以下迁移,EF 实际上为 up 和 down 方法生成相同的 SQL:

public override void Up()
{

AlterColumn("dbo.Client", "Guid", c => c.Guid(nullable: false, identity: true));
}

public override void Down()
{
AlterColumn("dbo.Client", "Guid", c => c.Guid(nullable: false));
}

生成的sql为:

ALTER TABLE [dbo].[Client] ALTER COLUMN [Guid] [uniqueidentifier] NOT NULL

为什么上面的迁移会为两条语句创建相同的sql?如何让 EF 生成 GUID?我可以/必须在客户端(代码)空间中执行此操作吗?如果必须,我如何保证跨表的唯一性?

最佳答案

DatabaseGenerationOption.Identity 应用于标识列。

尝试改用 DatabaseGenerationOption.Computed。它应该防止 EF 在插入列时发送值,并且应该在 SaveChanges 上正确提取数据库生成的值。

关于c# - 自动生成不是 Entity Framework 中主键的 GUID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26370543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com