【问题标题】:Seed method in EF6 without overwriting valuesEF6 中的种子方法而不覆盖值
【发布时间】:2016-08-24 13:27:36
【问题描述】:

我在我的项目中重写了 DbMigrationConfiguration 种子方法,以获取一些用户权限的默认数据。目前,每次迁移运行时,我的数据都会被覆盖。

这是我目前正在做的事情:

protected override void Seed(MyDbContext dbContext)
{
    List<Permission> permissions = PermissionFactory.CreatePermissions();
    dbContext.Permissions.AddOrUpdate(permissions);            
}

和权限实体:

public class Permission
{
    public Guid Id { get; set; }
    public string Role { get; set; }
    public bool Allow { get; set; }
}

我希望该数据只写入一次,并且只添加新条目,前提是它们的 ID 与表中当前的 ID 不同。我该如何做到这一点,以便在每次迁移运行时都不会重置我的权限?

【问题讨论】:

    标签: c# .net entity-framework entity-framework-6 entity-framework-migrations


    【解决方案1】:

    我想你想要的是AddIfNotExists

    public static class EntityFrameworkExtension
    {
        public static void AddIfNotExists<T>(
            this IDbSet<T> t, Func<T, object> func, params T[] objectsToAdd) 
            where T : class
        {
            foreach (var obj in objectsToAdd
                .Where(obj => !t.Select(func).Contains(func.Invoke(obj))))
                    t.Add(obj);
        }
    }
    

    所以你可以用它来调用它

    dbContext.Permissions.AddIfNotExists(p=>p.Id,
        new Permission{/*values*/},
        new Permission{/*values*/},
        new Permission{/*values*/}
    );
    

    只会添加新条目

    【讨论】:

    • 正是我想要的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多