相关疑难解决方法(0)

实体框架6 GUID作为主键:不能将值NULL插入列'Id',表'FileStore'; 列不允许空值

我有一个主键"Id"的实体,它是Guid:

public class FileStore
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Path { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有一些配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<FileStore>().Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试插入记录时,我收到以下错误:

无法将值NULL插入列'Id',表'FileStore'; 列不允许空值.INSERT失败.\ r \n语句已终止.

我不想手动生成Guid.我只想插入一条记录Id并由SQL Server生成.如果我设置.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity),则Id列不是SQL Server中的标识列.

如何配置实体框架以在SQL Server中自动生成Guid?

c# entity-framework sql-server-2008 entity-framework-6

71
推荐指数
6
解决办法
10万
查看次数

顺序GUID

我希望有人能回答这个问题.

rpcrt4.dll类中的UuidCreateSequential方法如何用于播种它的guid?

我知道的很多:Microsoft更改了UuidCreate函数,因此它不再使用机器的MAC地址作为UUID的一部分.由于CoCreateGuid调用UuidCreate来获取其GUID,因此其输出也发生了变化.如果您仍然希望按顺序生成GUID(有助于在系统注册表中将相关的GUID组保持在一起),则可以使用UuidCreateSequential函数.

问题背后的原因是.如果我使用此函数在Web群集中生成顺序GUID,如何确保GUID接近一系列GUID而不会重复GUID?

c# windows dll guid

12
推荐指数
1
解决办法
9693
查看次数

实体框架中的 NEWID() SQL Server 函数

我正在使用AngularJSASP.NET实体框架SQL Server数据库开发一个 Web 应用程序。

我想通过此方法使用EF插入一些行:

public string addRow(int CaptionID, string enLang)
{
    string output = "";
    try
    {
        var Cap = new Table_Name();

        string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

        Cap.CodeId = CaptionID;
        Cap.Created = DateTime.Now;
        Cap.CreatedBy = userName;
        Cap.ID = "";
        Cap.CodeLanguage = "en";
        Cap.CodeCountry = "GB";
        Cap.Caption = enLang;
        _db.Entry(Cap).State = EntityState.Added;

        _db.SaveChanges();

        output = "Created";

    }
    catch (Exception ex)
    {
        output = ex.InnerException.Message;
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)

这个功能有效。

但我对这个函数有一个疑问NEWID(),我已经搜索了很多以知道如何重现相同的内容,但我不知道,我看过这个 …

c# sql-server asp.net entity-framework

2
推荐指数
1
解决办法
5884
查看次数

在实体优先迁移中为新 Guid 列添加默认值

我正在为我的项目使用实体代码首次迁移。我已经启动并运行了系统。但是,我需要添加一个新的 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 作为默认值?

migration asp.net-mvc ef-code-first

1
推荐指数
2
解决办法
3517
查看次数