C# 实体框架7标识插入

C# 实体框架7标识插入,c#,sql,entity-framework,asp.net-core,entity-framework-core,C#,Sql,Entity Framework,Asp.net Core,Entity Framework Core,我需要在一个数据库中存储大量的用户数据,其中每个用户都有一个ID作为密钥。但是,这些用户都来自更大的用户池,因此,ID不会增加,也无法自动生成。我需要能够手动设置ID 有没有一个简单的方法可以做到这一点 我做了一些测试,这似乎对我在EF 7.0.0 rc1决赛中的表现有效: modelBuilder.Entity<Foo>().HasKey(x => x.Id); modelBuilder.Entity<Foo>().Property(x => x.Id).V

我需要在一个数据库中存储大量的用户数据,其中每个用户都有一个ID作为密钥。但是,这些用户都来自更大的用户池,因此,ID不会增加,也无法自动生成。我需要能够手动设置ID


有没有一个简单的方法可以做到这一点

我做了一些测试,这似乎对我在EF 7.0.0 rc1决赛中的表现有效:

modelBuilder.Entity<Foo>().HasKey(x => x.Id);
modelBuilder.Entity<Foo>().Property(x => x.Id).ValueGeneratedNever();    
(此处的完整程序代码:)

它正确地插入和检索具有指定id的记录,并且表指定了正确的主键

这是生成的迁移代码:

migrationBuilder.CreateTable(
    name: "Foo",
    columns: table => new
    {
        Id = table.Column<long>(nullable: false),
        Descr = table.Column<string>(nullable: true)
    },
    constraints: table =>
    {
        table.PrimaryKey("PK_Foo", x => x.Id);
    });
migrationBuilder.CreateTable(
姓名:"富",,
列:表=>new
{
Id=table.Column(可空:false),
Descr=table.Column(可空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_Foo”,x=>x.Id);
});

您是否也有引用这些ID的相关数据?无论是哪种方式,听起来都不像EF是这个工作的正确工具——考虑使用ETL工具或编写相应的INSERT语句。难道你不能直接进入EDMX文件并将SoreGeneratedPattern设置为“没有”吗?或者我在这里遗漏了什么?@Dave我认为EF7没有很好地使用edmx文件,这会很有趣。如果数据库字段已配置为标识字段,请设置
DatabaseGeneratedOption。无
将没有帮助。数据库仍不允许您手动提供标识。您需要允许在表上插入标识。看看这个博客@我明白了,我从来没有亲自尝试过。我将做一个快速的项目,检查一下我做了一个简单的测试,它对我有效,只是EF7的语法错误(这是EF6),我正在更新
migrationBuilder.CreateTable(
    name: "Foo",
    columns: table => new
    {
        Id = table.Column<long>(nullable: false),
        Descr = table.Column<string>(nullable: true)
    },
    constraints: table =>
    {
        table.PrimaryKey("PK_Foo", x => x.Id);
    });