带有静态DbInitializer的EF Core和种子数据

问题描述

我要实现以下内容https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro?view=aspnetcore-3.1#initialize-db-with-test-data

它可以工作,但是我需要验证是否已添加数据。

我在Internet上找到了以下解决方案:

    public static EntityEntry<TEnt> AddIfNotExists<TEnt,TKey>(this DbSet<TEnt> dbSet,TEnt entity,Func<TEnt,TKey> predicate) where TEnt : class
    {
        var exists = dbSet.Any(c => predicate(entity).Equals(predicate(c)));
        return exists
            ? null
            : dbSet.Add(entity);
    }

    private static void AddRangeIfNotExists<TEnt,IEnumerable<TEnt> entities,TKey> predicate) where TEnt : class
    {
        var entitiesExist = from ent in dbSet
                            where entities.Any(add => predicate(ent).Equals(predicate(add)))
                            select ent;

        dbSet.AddRange(entities.Except(entitiesExist));
    }

它对于条件简单(一次检查)的情况很好用,但是我有一个复杂的主键,并且想确定是否已经添加了使用此键的记录:

    public static void Initialize(DataContext context)
    {
        context.Database.EnsureCreated();

        context.DeviceCharacteristicModelMappings.AddIfNotExists(new DeviceCharacteristicModelMapping
        {
            CharacteristicId = 2,DeviceModelId = 2
        },p => new { p.CharacteristicId,DeviceModelId });

        //....

        context.SaveChanges();
    }

,但根本无法编译。如何正确执行?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)