EF6中的种子方法,不覆盖值

时间:2016-08-24 13:27:36

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

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

这就是我现在正在做的事情:

$f0

和权限实体:

li $v0, 7       # $v0 =7    
syscall         # run read_double

li.d $f2, 4.3934567
mul.d $f12, $f0, $f2   # multiply user input by $f2. put the result in $f12
                       # for easy printing.

我希望这些数据只写一次,如果它们与表中当前的ID不同,则只添加新条目。如何执行此操作,以便每次迁移时都不会重置我的权限?

1 个答案:

答案 0 :(得分: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*/}
);

只会添加新条目