UseInMemoryDatabase是否可以使用自动增量ID?

时间:2019-05-30 18:23:03

标签: c# .net .net-core

我在.net核心应用程序中使用UseInMemoryDatabase。我需要自动递增功能。那可能吗?例如,我的班级是;

public class City
        {
            public int Id { get; set; }
            public string Name { get; set; }
        } 

...

public DbSet<Statistic> Statistics { get; set; }

...

我要添加一个新对象,如下所示;

context.Cities.Add(new City{Name = "Amsterdam"});

我不想添加以下内容;

context.Cities.Add(new City{Id = 1,Name = "Amsterdam"});

因为我不想每次都检查现有的ID。

1 个答案:

答案 0 :(得分:2)

是的,只要您不设置Id(因此它是与ID 0一起插入的),就可以这样做,甚至是默认行为,这与DB支持的提供程序中的行为相同。

using System;
using Microsoft.EntityFrameworkCore;

namespace InMemoryIdSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var options = new DbContextOptionsBuilder<CityContext>().UseInMemoryDatabase("Cities").Options;
            using (var context = new CityContext(options))
            {
                context.Add(new City { Name = "Vienna" });
                context.Add(new City { Name = "Munich" });
                context.SaveChanges();
            }

            using (var context = new CityContext(options))
            {
                foreach(var city in context.Cities)
                {
                    Console.WriteLine($"City {city.Id}: {city.Name}");
                }
            }
        }
    }

    public class City
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class CityContext : DbContext
    {
        public CityContext(DbContextOptions<CityContext> options) : base(options) { }

        public DbSet<City> Cities { get; set; }
    }
}

打印:

$ dotnet run
City 1: Vienna
City 2: Munich