如何使用内存数据库中的Entity Framework核心自动递增列?

Nic*_* N. 5 c# entity-framework .net-core ef-core-2.0

我正在使用这样的内存EF Core数据库:

            var options = new DbContextOptionsBuilder<DmpContext>()
            .UseInMemoryDatabase("test")
            .Options;

        var context = new CustomContext(options);
Run Code Online (Sandbox Code Playgroud)

我正在使用仿冒品添加一些随机数据。

            var resources = new Faker<Resource>()
            .RuleFor(x => x.Name, x => x.Name.FullName())
            .Generate(20);
Run Code Online (Sandbox Code Playgroud)

在此资源集合中,所有id仍为零。

当我执行AddRange时,我希望生成ID:

                context.Resources.AddRange(resources);
                context.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)

但是它们不是生成的。

System.AggregateException:发生一个或多个错误。(无法跟踪实体类型'Resource'的实例,因为已经跟踪了另一个{'ResourceId'}具有相同键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。

所以我想,然后让我直接设置它们,然后自己创建一个自动增量机制。那行得通。

但是,当我随后尝试测试我的Add方法时(这些方法将插入记录)。我无法在这些方法中设置ID,因为ID甚至不在界面中。再次,我希望EF自动生成ID,但是它会尝试插入ID 1(已经使用,因为我已经生成了ID 1,直到20)。

有谁知道如何告诉内存数据库中的EF核心始终自动递增其密钥?

Liq*_*ore -5

您应该在实体框架设计器或代码中将身份字段标记为身份。EF 自行管理所有身份生成机制。

检查这个资源

这是在编辑器中设置它的方法(按 f4 或右键单击身份字段 -> 属性):

在此输入图像描述

  • 我认为你没有理解我的问题。这是关于使用 EF core 的内存数据库,对于将内存数据库的存储生成模式设置为 Identity 也没有帮助。 (2认同)